{"_id":"ipfs","_rev":"531-15e0ad611201e9ef4357138babd82f4f","name":"ipfs","description":"JavaScript implementation of the IPFS specification","dist-tags":{"latest":"0.66.1","next":"0.66.0-7b79c1b8"},"versions":{"0.1.0":{"name":"ipfs","version":"0.1.0","description":"ipfs implementation in node","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/jbenet/node-ipfs.git"},"keywords":["ipfs"],"author":{"name":"Juan Benet","email":"juan@benet.ai","url":"http://juan.benet.ai/"},"license":"MIT","bugs":{"url":"https://github.com/jbenet/node-ipfs/issues"},"homepage":"https://github.com/jbenet/node-ipfs","gitHead":"56fdd1fa0ee7f1111bd0741a16d57ab13c501fde","_id":"ipfs@0.1.0","_shasum":"4de665c08924396299a1203c28599717ece7042f","_from":".","_npmVersion":"2.4.1","_nodeVersion":"1.1.0","_npmUser":{"name":"jbenet","email":"juan@benet.ai"},"maintainers":[{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"4de665c08924396299a1203c28599717ece7042f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.1.0.tgz","integrity":"sha512-DKUjPUUULooUOJ22nR4ZqUgBAhpmI/BOpMhzF0neUIqpfee/bmQ87lch239wtKiPWUX/9OPeOwRrOOIKfHUGxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTuItnc4GYdDSmXyrdTnbwj/dRi8cZ9lnYT2fi8NAapAIgTAOU3oUdggQVUyhTThEg4tt3U4gu4rhLw/CTLNRHxDw="}]},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.1.1":{"name":"ipfs","version":"0.1.1","description":"ipfs implementation in node","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/jbenet/node-ipfs.git"},"keywords":["ipfs"],"author":{"name":"Juan Benet","email":"juan@benet.ai","url":"http://juan.benet.ai/"},"license":"MIT","bugs":{"url":"https://github.com/jbenet/node-ipfs/issues"},"homepage":"https://github.com/jbenet/node-ipfs","gitHead":"2bcc8b7e2ea04846d8ef6b0698a0740a711c2958","_id":"ipfs@0.1.1","_shasum":"44face56efef0fc3ca927032c4ca2258e11114de","_from":".","_npmVersion":"2.4.1","_nodeVersion":"1.1.0","_npmUser":{"name":"jbenet","email":"juan@benet.ai"},"maintainers":[{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"44face56efef0fc3ca927032c4ca2258e11114de","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.1.1.tgz","integrity":"sha512-4+/eRTXSXjCZu8qJwOaVNv/McSAtuerb6SGCIx96KHvKx6EUC0yuzy11kCr/ppwm4lRcXa7oBwEbe/HVfkxM5Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDh4eqOlNG0YlDCQkkUj2D+OrqEddrrvYgGmVvhF5T7iQIhAKQ1Hiq3Vhq4ETybaucQhX3xIvW2GfUwEDxhfMS1r3L0"}]},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.2.0":{"name":"ipfs","version":"0.2.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard","coverage":"istanbul cover --print both -- _mocha tests/test-*/index.js","test":"npm run test:node","test:node":"mocha tests/test-*/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js","test:cli-offline":"mocha tests/test-cli-offline/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","binary-loader":"0.0.1","brfs":"^1.4.3","chai":"^3.4.1","fs-blob-store":"^5.2.1","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","raw-loader":"^0.5.1","rimraf":"^2.4.4","standard":"^5.4.1","transform-loader":"^0.2.3","webpack":"git+https://github.com/diasdavid/webpack#81f5994"},"dependencies":{"bl":"^1.0.0","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-repo":"^0.4.1","ipfs-merkle-dag":"git+https://github.com/vijayee/js-ipfs-merkle-dag","lodash.get":"^4.0.0","lodash.set":"^4.0.0","ronin":"^0.3.11"},"gitHead":"823b179ee029a79d71a7c288907d20e39a97d2a8","_id":"ipfs@0.2.0","_shasum":"fcc3128bcd89e14237f70f17ba7952c24adc93ea","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"fcc3128bcd89e14237f70f17ba7952c24adc93ea","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.2.0.tgz","integrity":"sha512-sLAOL/2lTBJwAdVPVcRHqYzDIwCuCfIkP5hNlmBM5RQeTXY/XNYr9g5AGqrDgVVPwQmo4lwlATgVFz/XDeR2mw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLY0w/3ZKBXDLu8sbK3s1XGuA54Blhl5zP/S1NT5YCUQIhAJmhrb5T09GDDKrUgnKlqBKDrGEfpYB8+yW1RfMgX/8g"}]},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.2.2":{"name":"ipfs","version":"0.2.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard","coverage":"istanbul cover --print both -- _mocha tests/test-*/index.js","test":"npm run test:node && npm run test:browser","test:node":"mocha tests/test-*/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js","test:cli-offline":"mocha tests/test-cli-offline/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","standard":"^5.4.1","transform-loader":"^0.2.3","webpack":"github:diasdavid/webpack#81f5994"},"dependencies":{"bl":"^1.0.0","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-repo":"^0.5.0","ipfs-merkle-dag":"github:vijayee/js-ipfs-merkle-dag","lodash.get":"^4.0.0","lodash.set":"^4.0.0","ronin":"^0.3.11"},"gitHead":"56f771bbcf77a14124e97c35d35ce24f4f4d29e0","_id":"ipfs@0.2.2","_shasum":"83e92f14881f02cd4188083a1d12cc5f7e9051e0","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"83e92f14881f02cd4188083a1d12cc5f7e9051e0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.2.2.tgz","integrity":"sha512-5PYkzbKyQxtILmDWIPJXqHl2lY+nLylBFOpe7wZqIH/q6vk3bpfMeLAVer7X+6SxxAVumkhkMGIGOfQ3e4Djsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIClr7jvZIv6Xis5nSAjXLpGrCWesgTaDLqHJdlMN0bNOAiAmiAZt145927Qd/lVKCSyjHeOCQnIbK2A8iEdXKk3T3Q=="}]},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.2.3":{"name":"ipfs","version":"0.2.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard","coverage":"istanbul cover --print both -- _mocha tests/test-*/index.js","test":"npm run test:node && npm run test:browser","test:node":"mocha tests/test-*/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js","test:cli-offline":"mocha tests/test-cli-offline/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","standard":"^5.4.1","transform-loader":"^0.2.3","webpack":"github:diasdavid/webpack#81f5994"},"dependencies":{"bl":"^1.0.0","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-blocks":"^0.1.0","ipfs-merkle-dag":"^0.1.1","ipfs-repo":"^0.5.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","ronin":"^0.3.11"},"gitHead":"957fa7de789d149bf30cbc01ea57be819464c973","_id":"ipfs@0.2.3","_shasum":"262eb4a994cc089f2f792fa277838d2900785ef4","_from":".","_npmVersion":"3.6.0","_nodeVersion":"4.2.4","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"262eb4a994cc089f2f792fa277838d2900785ef4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.2.3.tgz","integrity":"sha512-cxgxYUI6e46sbykirqrJg5Wa+cI77bjR5Vk0hl1OC0GZwq6uJ/MdYrS9jGjkg0VtRo39mbsMhk8cjcC6cLHvBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvYrTK/FwiIe3K6GTQNYKYcNGM5psQg/Zzc+mGjvPJPAiEAxWoHuWJ9D/WoQwcDUo78J8LnK+5hCjUU7pAXAA0hHH8="}]},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.3.0":{"name":"ipfs","version":"0.3.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard","coverage":"istanbul cover --print both -- _mocha tests/test-*/index.js","test":"npm run test:node && npm run test:browser","test:node":"mocha tests/test-*/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js","test:cli-offline":"mocha tests/test-cli-offline/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","standard":"^5.4.1","transform-loader":"^0.2.3","webpack":"^2.0.5-beta"},"dependencies":{"bl":"^1.0.0","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-blocks":"^0.1.0","ipfs-merkle-dag":"^0.2.1","ipfs-repo":"^0.5.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","ronin":"^0.3.11"},"gitHead":"70ed97b4dac213d5042cb022d06afd5e8aac4c44","_id":"ipfs@0.3.0","_shasum":"120a178230181cde5f990f9ea929e1c2d84ee1bc","_from":".","_npmVersion":"3.6.0","_nodeVersion":"4.2.4","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"120a178230181cde5f990f9ea929e1c2d84ee1bc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.3.0.tgz","integrity":"sha512-HPUg/uMEgSKVjl/Qxi+TIrx7HFlcYe6T0WxE6gIclZWKIPNZZtp+d9FE8OOPT3KnwavGgaKDie5DFbjvQ6jdaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9zrMmaY2ReJNTgGJNbSxfR4/QNADSPkdi4cxzvIoNYgIhAKfa694HBz+c6yr34dldDPccOsZ6o2APYdEJIKVB7tGm"}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/ipfs-0.3.0.tgz_1454524758763_0.7172681104857475"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.3.1":{"name":"ipfs","version":"0.3.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard","coverage":"istanbul cover --print both -- _mocha tests/test-*/index.js","test":"npm run test:node && npm run test:browser","test:node":"mocha tests/test-*/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js","test:cli-offline":"mocha tests/test-cli-offline/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","standard":"^5.4.1","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.0.0","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-blocks":"^0.1.0","ipfs-merkle-dag":"^0.2.1","ipfs-repo":"^0.5.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","peer-id":"^0.5.0","ronin":"^0.3.11"},"gitHead":"50d95a71b266de36419ed38e2ad0a52939e752cc","_id":"ipfs@0.3.1","_shasum":"e356ceb15289d6e2f7949169701df6c8c2fba964","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.5.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"e356ceb15289d6e2f7949169701df6c8c2fba964","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.3.1.tgz","integrity":"sha512-Y3dJ3j2iFrdiAUsOVJBvPwNed2OvDIrT/H5PuPR73vVhyKFnyew58VWqeZA37mAYZvtADF6C4qY8csgN+x4j/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFlZkdRaHsqUkGf1Lpv82PSjYy6C/4PPO8SgcSaLe8odAiAQlj0O3VDeNrTfXgcAsstGPv7kRfBA1d7a+FSDlZvhKg=="}]},"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/ipfs-0.3.1.tgz_1455896125645_0.22582268132828176"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.0":{"name":"ipfs","version":"0.4.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard","coverage":"istanbul cover --print both -- _mocha tests/test-core/index.js","test":"npm run test:node && npm run test:browser","test:node":"npm run test:node:core && npm run test:node:http-api && npm run test:node:cli","test:node:cli":"mocha tests/test-cli/index.js","test:node:core":"mocha tests/test-core/index.js","test:node:http-api":"mocha tests/test-http-api/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","standard":"^5.4.1","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.0.0","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-api":"^2.13.1","ipfs-blocks":"^0.1.0","ipfs-merkle-dag":"^0.2.1","ipfs-repo":"^0.5.0","joi":"^8.0.2","lodash.get":"^4.0.0","lodash.set":"^4.0.0","peer-id":"^0.5.0","ronin":"^0.3.11"},"gitHead":"45a56aab1da388cdf2d35e4a3d00a9d2afc44f1c","_id":"ipfs@0.4.0","_shasum":"125f1ea0f10f452d3cc1d6bec536bd91ef11d370","_from":".","_npmVersion":"3.6.0","_nodeVersion":"4.2.4","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"125f1ea0f10f452d3cc1d6bec536bd91ef11d370","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.0.tgz","integrity":"sha512-fCaJNPOPsKoCu+6A77FeTHWEEZsZb7JsrqNFOXExMcGZI3LijnAgeHvAgTUqrv49LmS/VGcnPmXtHBOIOijgsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzotLIL0zyfQKxp6wguVQuPBp63TsBulepW62Z1vIgaAiALMtufFMOxLVZRIdI9ROLo/bbL6LqP870AfKCEkVMLUQ=="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.0.tgz_1456246733934_0.9688807185739279"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.1":{"name":"ipfs","version":"0.4.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard --verbose | snazzy","coverage":"istanbul cover --print both -- _mocha tests/test-core/index.js","coverage:http-api":"istanbul cover --print both -- _mocha tests/test-http-api/index.js","test":"npm run test:node && npm run test:browser","test:node":"npm run test:node:core && npm run test:node:http-api && npm run test:node:cli","test:node:cli":"mocha tests/test-cli/index.js","test:node:core":"mocha tests/test-core/index.js","test:node:http-api":"mocha tests/test-http-api/index.js","test:browser":"karma start karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.0","standard":"^6.0.7","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-api":"^2.13.1","ipfs-blocks":"^0.1.0","ipfs-merkle-dag":"^0.2.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.5.0","joi":"^8.0.2","libp2p-ipfs":"^0.1.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","peer-id":"^0.6.0","peer-info":"^0.6.0","ronin":"^0.3.11","temp":"^0.8.3"},"gitHead":"9676f681a96d08e9443cfe4620618c9b69d2a805","_id":"ipfs@0.4.1","_shasum":"a83502647aec0ed9e04c65e0f798ef6e7d49c316","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"a83502647aec0ed9e04c65e0f798ef6e7d49c316","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.1.tgz","integrity":"sha512-AC72QeM0gUAdOET8crnvDHBVXfY9e8QuWkyP3Yw8n2d3IuKRZGfN8wdAeRhP4k4h7PqdrF4Gki3lxfbAaE4jmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYjrElq4LfQq8s/EFdPKGCPiSXXn7cdMPqONfc9nYnjAiEAxePU17LoEBSWOS/NUzssPaMoHbVtuz4MbE0q9+bPM10="}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.1.tgz_1458139598366_0.967817762400955"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.2":{"name":"ipfs","version":"0.4.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard --verbose | snazzy","coverage":"istanbul cover --print both -- _mocha tests/test-core/index.js","coverage:http-api":"istanbul cover --print both -- _mocha tests/test-http-api/index.js","test":"npm run test:node && npm run test:browser","test:node":"npm run test:node:core && npm run test:node:http-api && npm run test:node:cli","test:node:teamcity":"npm run test:node:core:teamcity && npm run test:node:http-api:teamcity && npm run test:node:cli:teamcity","test:node:cli:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-cli/index.js","test:node:core:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-core/index.js","test:node:http-api:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-http-api/index.js","test:node:cli":"mocha tests/test-cli/index.js","test:node:core":"mocha tests/test-core/index.js","test:node:http-api":"mocha tests/test-http-api/index.js","test:browser":"karma start karma.conf.js","test:browser:teamcity":"karma start --reporters teamcity --colors false karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-teamcity-reporter":"^0.2.2","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","mocha-teamcity-reporter":"^1.0.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.0","standard":"^6.0.7","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-api":"^2.13.1","ipfs-blocks":"^0.1.0","ipfs-data-importing":"^0.3.0","ipfs-merkle-dag":"^0.2.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.5.0","joi":"^8.0.2","libp2p-ipfs":"^0.1.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","peer-id":"^0.6.0","peer-info":"^0.6.0","ronin":"^0.3.11","temp":"^0.8.3"},"gitHead":"3da779666a176adcbc2cb467792c0cf07f494af1","_id":"ipfs@0.4.2","_shasum":"b2c93d432f38288095a1d1d4acd930e39fbc54b0","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"b2c93d432f38288095a1d1d4acd930e39fbc54b0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.2.tgz","integrity":"sha512-xK0SQ55YnNdUfbQe/nC07bpG8TBArTQHUKb7Z1IhmcxXGZKlf0O2x6V6OUsPJmyKtV12lPUUv+Gh7E2Mhb2wwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZUtcn5NuQbO9cSfq8o73Hlq8GR3u24x2S/hY6eDVTLAiEAudxeDcn2R5se0vw36qsHe3C/KT2vwiPBDoplZ4ayVq0="}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.2.tgz_1458566354562_0.29131241980940104"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.3":{"name":"ipfs","version":"0.4.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/index.js","scripts":{"lint":"standard --verbose | snazzy","coverage":"istanbul cover --print both -- _mocha tests/test-core/index.js","coverage:http-api":"istanbul cover --print both -- _mocha tests/test-http-api/index.js","test":"npm run test:node && npm run test:browser","test:node":"npm run test:node:core && npm run test:node:http-api && npm run test:node:cli","test:node:teamcity":"npm run test:node:core:teamcity && npm run test:node:http-api:teamcity && npm run test:node:cli:teamcity","test:node:cli:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-cli/index.js","test:node:core:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-core/index.js","test:node:http-api:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-http-api/index.js","test:node:cli":"mocha tests/test-cli/index.js","test:node:core":"mocha tests/test-core/index.js","test:node:http-api":"mocha tests/test-http-api/index.js","test:browser":"karma start karma.conf.js","test:browser:teamcity":"karma start --reporters teamcity --colors false karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-teamcity-reporter":"^0.2.2","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","mocha-teamcity-reporter":"^1.0.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.0","standard":"^6.0.7","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-api":"^2.13.1","ipfs-blocks":"^0.1.0","ipfs-data-importing":"^0.3.0","ipfs-merkle-dag":"^0.2.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.5.0","joi":"^8.0.2","libp2p-ipfs":"^0.2.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","peer-id":"^0.6.0","peer-info":"^0.6.0","ronin":"^0.3.11","temp":"^0.8.3"},"gitHead":"b7aa1a44052eeda97cfd414727ed266546f191be","_id":"ipfs@0.4.3","_shasum":"dd95031c31f8114e090b8de0f86f91239826fdde","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"dd95031c31f8114e090b8de0f86f91239826fdde","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.3.tgz","integrity":"sha512-gsmC1xmBWUTixmc0wiTjH4MJgRmA5w9CAskWCmbQTNasktL95dhoWP97mhZ18C57+6LAV78lYigLZnDeTk1mAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkmls5WlMaqEQWSKX2GX6Qedwi0L8fiwryXJPWxMdcowIgbUlZ2dX3jSp91xYjemrkmuXAl7IHOijGknXwHjLdxCQ="}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.3.tgz_1458569040904_0.876139513682574"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.4":{"name":"ipfs","version":"0.4.4","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","scripts":{"lint":"standard --verbose | snazzy","coverage":"istanbul cover --print both -- _mocha tests/test-core/index.js","coverage:http-api":"istanbul cover --print both -- _mocha tests/test-http-api/index.js","test":"npm run test:node && npm run test:browser","test:node":"npm run test:node:core && npm run test:node:http-api && npm run test:node:cli","test:node:teamcity":"npm run test:node:core:teamcity && npm run test:node:http-api:teamcity && npm run test:node:cli:teamcity","test:node:cli:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-cli/index.js","test:node:core:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-core/index.js","test:node:http-api:teamcity":"mocha --reporter mocha-teamcity-reporter tests/test-http-api/index.js","test:node:cli":"mocha tests/test-cli/index.js","test:node:core":"mocha tests/test-core/index.js","test:node:http-api":"mocha tests/test-http-api/index.js","test:browser":"karma start karma.conf.js","test:browser:teamcity":"karma start --reporters teamcity --colors false karma.conf.js","test:core":"mocha tests/test-core/index.js","test:cli":"mocha tests/test-cli/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","fs-blob-store":"^5.2.1","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.23","karma-teamcity-reporter":"^0.2.2","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.0.0","mocha":"^2.3.4","mocha-teamcity-reporter":"^1.0.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.0","standard":"^6.0.7","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","hapi":"^12.0.0","ipfs-api":"^2.13.1","ipfs-blocks":"^0.1.0","ipfs-data-importing":"^0.3.0","ipfs-merkle-dag":"^0.2.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.5.0","joi":"^8.0.2","libp2p-ipfs":"^0.2.0","lodash.get":"^4.0.0","lodash.set":"^4.0.0","peer-id":"^0.6.0","peer-info":"^0.6.0","ronin":"^0.3.11","temp":"^0.8.3"},"gitHead":"3b945e1ca0dffda8379f1b3672b9d579e2c035cf","_id":"ipfs@0.4.4","_shasum":"d4536a4c1ded58fed53090ff83d6814466762885","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"d4536a4c1ded58fed53090ff83d6814466762885","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.4.tgz","integrity":"sha512-/le6WByqv2c8PRYxGPmE7JUmIqguPu4Yaq6UIbrKxwlV2L/tjCE4wAMpAHdsNVCHHPD1b6r11OmbWEOGqEvBww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF6p+75CH+3wC5UDyE4jRVxxwj12iqRfRE0IMzGBHsywIgSG4WkdiDwWxhyVaCawvyeCoVOQMyKFJSu6k6kxTndJg="}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.4.tgz_1458640502457_0.3154735134448856"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.5":{"name":"ipfs","version":"0.4.5","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","scripts":{"lint":"standard --verbose | snazzy","coverage":"istanbul cover --print both -- _mocha test/core-tests/index.js","coverage:http-api":"istanbul cover --print both -- _mocha test/http-api-tests/index.js","test":"npm run test:node && npm run test:browser","test:node":"npm run test:node:core && npm run test:node:http-api && npm run test:node:cli","test:node:teamcity":"npm run test:node:core:teamcity && npm run test:node:http-api:teamcity && npm run test:node:cli:teamcity","test:node:cli:teamcity":"mocha --reporter mocha-teamcity-reporter test/cli-tests/index.js","test:node:core:teamcity":"mocha --reporter mocha-teamcity-reporter test/core-tests/index.js","test:node:http-api:teamcity":"mocha --reporter mocha-teamcity-reporter test/http-api-tests/index.js","test:node:cli":"mocha test/cli-tests/index.js","test:node:core":"mocha test/core-tests/index.js","test:node:http-api":"mocha test/http-api-tests/index.js","test:browser":"karma start karma.conf.js","test:browser:teamcity":"karma start --reporters teamcity --colors false karma.conf.js","test:core":"mocha test/core-tests/index.js","test:cli":"mocha test/cli-tests/index.js"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"async":"^1.5.2","brfs":"^1.4.3","buffer-loader":"0.0.1","chai":"^3.4.1","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","idb-plus-blob-store":"^1.0.0","istanbul":"^0.4.1","json-loader":"^0.5.4","karma":"^0.13.19","karma-chrome-launcher":"^0.2.2","karma-cli":"^0.1.2","karma-firefox-launcher":"^0.1.7","karma-mocha":"^0.2.1","karma-spec-reporter":"0.0.26","karma-teamcity-reporter":"^0.2.2","karma-webpack":"^1.7.0","local-storage-blob-store":"0.0.3","lodash":"^4.10.0","mocha":"^2.3.4","mocha-teamcity-reporter":"^1.0.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.1","standard":"^6.0.7","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3","webpack":"^2.0.7-beta"},"dependencies":{"bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","hapi":"^13.3.0","ipfs-api":"github:ipfs/js-ipfs-api#f3e2d42","ipfs-blocks":"^0.1.0","ipfs-data-importing":"^0.3.3","ipfs-merkle-dag":"^0.3.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.6.1","joi":"^8.0.2","libp2p-ipfs":"^0.2.0","lodash.get":"^4.2.1","lodash.set":"^4.0.0","multiaddr":"^1.3.0","peer-id":"^0.6.3","peer-info":"^0.6.0","ronin":"^0.3.11","temp":"^0.8.3"},"gitHead":"d7b66540e60c4be107a5cb0fa661415056721e0e","_id":"ipfs@0.4.5","_shasum":"3901fb4d11a850d4ceaf98e8736bbd241bf5956a","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"3901fb4d11a850d4ceaf98e8736bbd241bf5956a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.5.tgz","integrity":"sha512-mG9QwYjHCDK8M2FmayRxLvi/t+WKNqUQq9rwqiC5yQr0g+1rBV2wCTenVSYMfD3oYoX1e+ewZ6U1tTflP/zn0g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1XMO74IxS6KKCXxy+YWKEYvGEduFdTpO36d4AFj9AyAiEA908KluFrd4j+u0cF3M6c9PqIIpaCV6ozJyO7j8UwSQA="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.4.5.tgz_1460455052629_0.25568810384720564"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.6":{"name":"ipfs","version":"0.4.6","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"aegir-coverage","test":"aegir-test","test:node":"aegir-test node","test:browser":"aegir-test browser","build":"aegir-build","release":"aegir-release","release:minor":"aegir-release minor","release:major":"aegir-release major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^2.1.1","async":"^1.5.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","idb-plus-blob-store":"^1.0.0","local-storage-blob-store":"0.0.3","lodash":"^4.11.1","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.1","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","hapi":"^13.3.0","ipfs-api":"^3.0.1","ipfs-blocks":"^0.2.0","ipfs-data-importing":"^0.3.3","ipfs-merkle-dag":"^0.4.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.6.1","joi":"^8.0.2","libp2p-ipfs":"^0.3.1","lodash.get":"^4.2.1","lodash.set":"^4.0.0","multiaddr":"^1.3.0","peer-id":"^0.6.6","peer-info":"^0.6.2","ronin":"^0.3.11","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js"}},"externals":{"fs":"{}","ipfs-data-importing":"{ import: {} }","libp2p-ipfs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"01ce3f91c4622f2520aec801f0bb2268ebee968c","_id":"ipfs@0.4.6","_shasum":"f70fc17892964bc929f027cf474df7c6dcbc2aea","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"f70fc17892964bc929f027cf474df7c6dcbc2aea","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.6.tgz","integrity":"sha512-t9W3ib4TRIUd68MF4O7M+CwSPH8ln4Ra1oaOxAgFxzXRRjPj6nhu8P3NrCxC0We78Nq4WpFhMzWoI8LY8xzkyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdeOkOUkvU4bgFu7hA8VVrX3e9EhG6M2R8SJ0lrWSSfwIgTXB+DOK8mVPL3QdE1YcBWnKbItl6JZHCqwIbvKhEcBc="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.4.6.tgz_1461330184404_0.06310975248925388"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.7":{"name":"ipfs","version":"0.4.7","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"aegir-coverage","test":"aegir-test","test:node":"aegir-test node","test:browser":"aegir-test browser","build":"aegir-build","release":"aegir-release","release:minor":"aegir-release minor","release:major":"aegir-release major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^2.1.2","async":"^1.5.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","idb-plus-blob-store":"^1.1.2","lodash":"^4.11.1","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.1","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","hapi":"^13.3.0","ipfs-api":"^3.0.1","ipfs-blocks":"^0.2.0","ipfs-data-importing":"^0.3.3","ipfs-merkle-dag":"^0.4.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.6.1","joi":"^8.0.2","libp2p-ipfs":"^0.3.3","lodash.get":"^4.2.1","lodash.set":"^4.0.0","multiaddr":"^1.3.0","peer-id":"^0.6.6","peer-info":"^0.6.2","ronin":"^0.3.11","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js"}},"externals":{"fs":"{}","ipfs-data-importing":"{ import: {} }","libp2p-ipfs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"ed5102bd34da525af0c1cd38bfd4d32d3ee21626","_id":"ipfs@0.4.7","_shasum":"2cff38a953cc702947b7b88725ac94ac00699411","_from":".","_npmVersion":"3.8.0","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"2cff38a953cc702947b7b88725ac94ac00699411","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.7.tgz","integrity":"sha512-PlyC6X8Nrv+aNAdcuoOM2x11ITV2kykXizlxNf96wD2be/AR4k93KHoeKF25dKMn4aGn1B3tjDmelGjN0IE7Ww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICBp4QngbhhEpPbZAI8CYLqC7b4d9H8jtFD0VJBlEOl0AiBnr6WeOQ3Ho8PWeOM65trf9MKXO/4/LdzVXQJtUa0h5w=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.7.tgz_1461584660103_0.24719210038892925"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.8":{"name":"ipfs","version":"0.4.8","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"aegir-coverage","test":"aegir-test","test:node":"aegir-test node","test:browser":"aegir-test browser","build":"aegir-build","release":"aegir-release","release:minor":"aegir-release minor","release:major":"aegir-release major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^2.1.2","async":"^1.5.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","idb-plus-blob-store":"^1.1.2","lodash":"^4.11.1","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.1","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","hapi":"^13.3.0","ipfs-api":"^3.0.1","ipfs-block":"^0.2.0","ipfs-block-service":"^0.2.4","ipfs-data-importing":"^0.3.3","ipfs-merkle-dag":"^0.4.3","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.7.1","joi":"^8.0.2","libp2p-ipfs":"^0.3.3","lodash.get":"^4.2.1","lodash.set":"^4.0.0","multiaddr":"^1.3.0","peer-id":"^0.6.6","peer-info":"^0.6.2","ronin":"^0.3.11","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js"}},"externals":{"fs":"{}","ipfs-data-importing":"{ import: {} }","libp2p-ipfs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"aa51d31e93225ff29a83f867400075c4c5795b36","_id":"ipfs@0.4.8","_shasum":"36bba894d510872886add08e45529abdec540dfe","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"36bba894d510872886add08e45529abdec540dfe","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.8.tgz","integrity":"sha512-DVrsLUiQgMQxdCFVQx6NL2cZ8AkNBt0EeIfFSNcHuoqXkAEG+aaagiVyNlRMbZHAxsWnPrMHGbYOI1OeG6cG+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRl38E2IdbuQbwOThCYkhsQPR2FKieQaFcf0C5SzAFpgIhAMiTpQ4eJxp9B1iPTrjoQDqFMWwB949BOnN7rBQjwMp0"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.4.8.tgz_1461803756744_0.8349288303870708"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.9":{"name":"ipfs","version":"0.4.9","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"aegir-coverage","test":"aegir-test","test:node":"aegir-test node","test:browser":"aegir-test browser","build":"aegir-build","release":"aegir-release","release:minor":"aegir-release minor","release:major":"aegir-release major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.0","async":"^1.5.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","idb-plus-blob-store":"^1.1.2","lodash":"^4.11.1","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","snazzy":"^3.0.1","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","hapi":"^13.3.0","ipfs-api":"^3.0.1","ipfs-block":"^0.2.0","ipfs-block-service":"^0.2.4","ipfs-data-importing":"^0.3.3","ipfs-merkle-dag":"^0.4.3","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.7.1","joi":"^8.0.2","libp2p-ipfs":"^0.3.3","lodash.get":"^4.2.1","lodash.set":"^4.0.0","multiaddr":"^1.3.0","peer-id":"^0.6.6","peer-info":"^0.6.2","ronin":"^0.3.11","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js"}},"externals":{"fs":"{}","ipfs-data-importing":"{ import: {} }","libp2p-ipfs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"a3f061a1d26e44c06b8e79b6659f870a8961e2e2","_id":"ipfs@0.4.9","_shasum":"79a67826852494c93e7d727a89b4d9ca44523b3d","_from":".","_npmVersion":"3.8.3","_nodeVersion":"4.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"79a67826852494c93e7d727a89b4d9ca44523b3d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.9.tgz","integrity":"sha512-pzT8Tuey/EQ6DdaK7juZAi991nHVIkRlkg0pQ2VSXz9+uI9/LlDlaTuVvFne2ZLI9eir38EaRuP4KmQKkSerbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSEFcgUsq6bMZe8Lcg3fYIWHdlcSJFTbsMv/aYJELAkAiA3LeTbTTiNyw/vbFysXlv+hWQ2CJKy088+z227J4f4JA=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.9.tgz_1461874771868_0.0878674485720694"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.4.10":{"name":"ipfs","version":"0.4.10","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"aegir-coverage","test":"aegir-test","test:node":"aegir-test node","test:browser":"aegir-test browser","build":"aegir-build","release":"aegir-release","release:minor":"aegir-release --type minor","release:major":"aegir-release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.1","async":"^2.0.0-rc.3","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","idb-plus-blob-store":"^1.1.2","lodash":"^4.11.1","mocha":"^2.3.4","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.4.4","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.1","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.3.0","ipfs-api":"^3.0.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.3.0","ipfs-data-importing":"^0.3.3","ipfs-merkle-dag":"^0.5.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","joi":"^8.0.2","libp2p-ipfs":"^0.3.3","lodash.get":"^4.2.1","lodash.set":"^4.0.0","multiaddr":"^1.3.0","peer-book":"0.1.0","peer-id":"^0.6.6","peer-info":"^0.6.2","ronin":"^0.3.11","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js"}},"externals":{"fs":"{}","ipfs-data-importing":"{ import: {} }","libp2p-ipfs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"93445ee3e961b483cdbbbfd3e6268a0347ca14fb","_id":"ipfs@0.4.10","_shasum":"3b7c1766a684adce3c500abffed2647d4e223690","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"3b7c1766a684adce3c500abffed2647d4e223690","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.4.10.tgz","integrity":"sha512-HmFUlopjh6CPLpw5V6NrXzDbM6sCHp5EEviXlWlH+7IfkXFk3lK3ym7n1XWSCMkjRYyfbf89cUg6YorNuEOb1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9pmoW5/YcsRnof+J3o4iOasF9d4jhxv7Q6QhDQJ0ySAiEAt0lihO/RcE55M52JyCyMGMWTtMv88syJsl0mHy6NNJE="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.4.10.tgz_1462744559177_0.7064988745842129"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.5.0":{"name":"ipfs","version":"0.5.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","libp2p-ipfs-browser":"^0.2.0","lodash":"^4.11.2","mocha":"^2.4.5","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.3.0","ipfs-api":"^4.0.2","ipfs-bitswap":"^0.2.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.6.1","joi":"^8.0.5","libp2p-ipfs":"^0.3.8","libp2p-swarm":"^0.12.11","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^1.4.1","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.6","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"d0d2d348b9fdfab621e684abe9c7575343bdab1b","_id":"ipfs@0.5.0","_shasum":"af0264eb634f44e2f0a3c512fc028303fd1001be","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"af0264eb634f44e2f0a3c512fc028303fd1001be","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.5.0.tgz","integrity":"sha512-sCD5WWQ80HMYzX8R364dNnwINHXW+Dd25n/powC4QmjBhENGM/rqYLCf0HRKtdtbZ8SowgycN4uSkJMWXOe4Fg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5r5PTgYXT9jqKdXP7PgrYCoVvdrFH1QqXDYKt9KxVGAiA4KLHsvJYq4yHPQSjfcZmltyZnOVdsvMC6YcDB9S0mkg=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.5.0.tgz_1463420339286_0.07738111121580005"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.6.0":{"name":"ipfs","version":"0.6.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.4.5","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.3.0","ipfs-api":"^4.0.2","ipfs-bitswap":"^0.2.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.6.1","joi":"^8.0.5","libp2p-ipfs":"^0.5.0","libp2p-ipfs-browser":"^0.4.0","libp2p-swarm":"^0.15.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.0","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.6","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"714762e33f2949ec9a1733ef388f780ea4ae4328","_id":"ipfs@0.6.0","_shasum":"6454967b4232e61aaadc9d79438093826be61236","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"6454967b4232e61aaadc9d79438093826be61236","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.6.0.tgz","integrity":"sha512-3R/1Aeian38m4DgF2Gdz6Q8zNiglJVsVLoi2IFYpyWlBN6TXIG8JqPRCXR6Y5d4MACozQxydMNw9pp/4K5PaAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxDTxpY0C4YlB3QnC8PLygrFUWjUI39hmkUudNKjZ7QQIgEu91cwob3lBtDBv9nYHv0of8gv4WhaRTNwDrprQ1IC8="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.6.0.tgz_1463619499931_0.42899300111457705"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.6.1":{"name":"ipfs","version":"0.6.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.4.5","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.3.0","ipfs-api":"^4.0.2","ipfs-bitswap":"^0.2.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.6.1","joi":"^8.0.5","libp2p-ipfs":"^0.5.0","libp2p-ipfs-browser":"^0.4.0","libp2p-swarm":"^0.15.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.0","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.6","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"217574f409c21054bdaedbe1336b2a36c8363e3c","_id":"ipfs@0.6.1","_shasum":"1557baf50c0afb57b0e60889643dd6ad683108e6","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"1557baf50c0afb57b0e60889643dd6ad683108e6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.6.1.tgz","integrity":"sha512-1DNvpYV2KVXKUYuSJEq5f4chQxBR4PS6OoY1yssHQIfeQyyXclC8pgoJpwkdQfmm1NEu0ooHK8PKJ9BeO33NsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZ+OBNbjKBuPZjFIM3vZ/lHy4S8ih5MVm07K8r+r+imwIgHLnwUADIhpEDsu8YBV67ECeN01mx9+vybvxkT4wGHN0="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.6.1.tgz_1463619911776_0.1487013588193804"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.7.0":{"name":"ipfs","version":"0.7.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.2","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.4.5","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.6.1","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.3.0","ipfs-api":"^4.0.2","ipfs-bitswap":"^0.2.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.6.0","libp2p-ipfs-browser":"^0.5.0","libp2p-swarm":"^0.16.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.0","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.6","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"761f2c9766c785e8153c73f3c9a81622451d5bf6","_id":"ipfs@0.7.0","_shasum":"beebd0e5aabdabfa3dfe510f253d51679b7007d9","_from":".","_npmVersion":"3.8.9","_nodeVersion":"4.4.4","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"beebd0e5aabdabfa3dfe510f253d51679b7007d9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.7.0.tgz","integrity":"sha512-Hl6xmVuq0TXI79+BTU7SJJPmSQ7CGFC0cgdtWFBK6boLkv5j1+XQSz/0ZHwMuWOhFa1e9zVfIZb1gEg1EvsZ4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4jW4GHm7AuUo9SUL4/AScvanUgn9eHV0sBZSkt/7btwIhANI7SWzuLs3xYQR1sbY1ZZ3R1ad7ccrondSYgne8mr7k"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.7.0.tgz_1463826336059_0.24117307318374515"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.8.0":{"name":"ipfs","version":"0.8.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.5","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.2.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.8.0","libp2p-ipfs-browser":"^0.6.0","libp2p-swarm":"^0.18.1","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.7","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"9793f8a3ae26c67d91aea858331230f3c45e1464","_id":"ipfs@0.8.0","_shasum":"bd8b0c991af57575d42cfddb5ad22e215e143dfb","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"bd8b0c991af57575d42cfddb5ad22e215e143dfb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.8.0.tgz","integrity":"sha512-UfclAyXIVHm4PeGc+Wl1/IUAFNJfJo9OL95e7g4aYn2JJ0dRINX3iApVfoQgms6KW1iMbMfQf1yWQB7Yp4KInA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPeFTur6v45vEB7n5N3Aif3PRD671qOMd62NaRSqO7CAiEA2Rs4oPoOn2xHAxfqEGZfgSV+D4nRfvIWWDFoQOnK4Jk="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.8.0.tgz_1464037213389_0.8390153006184846"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.10.0":{"name":"ipfs","version":"0.10.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.5","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.2.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.8.1","libp2p-ipfs-browser":"^0.7.0","libp2p-swarm":"^0.18.1","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.7","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"b8abec3f922b6caaf8e289e2e5e4cd16d6fcd887","_id":"ipfs@0.10.0","_shasum":"fc07b133553606411ba6b45fef2fc871a711f766","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"fc07b133553606411ba6b45fef2fc871a711f766","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.10.0.tgz","integrity":"sha512-YC/hlRhbJACIcNJFkvYx1pPUOYzmKLs9BmR7TQp7M/fdkUEWkY81IZujeoCC5RSjVO3sZRG177cOdPBj/Z7rxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzoxeHYfqvwJk0Vmfqi+XeNqEc8JNOpANhGtZXu3SVnAiAzziR82YGBVgczWXnnUEkHN1r5/47avweVE6tsjjbtvw=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.10.0.tgz_1464085076872_0.9035539713222533"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.10.1":{"name":"ipfs","version":"0.10.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.5","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.2.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.8.1","libp2p-ipfs-browser":"^0.7.0","libp2p-swarm":"^0.18.2","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.7","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"4502d66ae55a6bd8a5b463967731b15b7aa58250","_id":"ipfs@0.10.1","_shasum":"a2eeacabc5c47ae2bed27640bcc394a6eed07fdd","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"a2eeacabc5c47ae2bed27640bcc394a6eed07fdd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.10.1.tgz","integrity":"sha512-UORnXwgmgaemd2vW9LzXKrpCpfZwqV6SNaPBJOWJ6tI7MU//vkXUKXXcdnsyIOJEzNFL2euJWq/opXITb9Kqrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4cmTEkup0ByMKh/uepnh9xU+NZM69X53CUR46NPUU2AIhAIhkp3LVQFF91qNFptBvt7i0LysW+Ett6grTE9dC+AYa"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.10.1.tgz_1464168442923_0.8477621672209352"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.10.2":{"name":"ipfs","version":"0.10.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.0.5","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.2.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.8.1","libp2p-ipfs-browser":"^0.7.0","libp2p-swarm":"^0.18.2","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.7","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"23e3b37d3061a025f0d6e44cdbf2303149e78280","_id":"ipfs@0.10.2","_shasum":"5962811c779a58b633f97d97f4122ec8c96cce8f","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"5962811c779a58b633f97d97f4122ec8c96cce8f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.10.2.tgz","integrity":"sha512-38EtaUFR5Fz473xOXetichxPNWche20Nxpijb4vSGBS6W8/EcAu2f3O9QYmtBguK0TMrl+S+h6QjJv1sGVJkVQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFAtnb7XvI0DDaQd0d1esAaqJwuL2Im6YBdbfKUf4VtyAiAnBP3EdLJlEVt3bulnWMnYhsxldb5AmKOGm/i+w+iX4A=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.10.2.tgz_1464255961829_0.7668751298915595"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.10.3":{"name":"ipfs","version":"0.10.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.1.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.2.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.8.1","libp2p-ipfs-browser":"^0.7.0","libp2p-swarm":"^0.18.2","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.1.1","peer-id":"^0.6.7","peer-info":"^0.6.2","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"aegir":{"webpack":{"resolve":{"alias":{"node-forge":"../../../node_modules/peer-id/vendor/forge.bundle.js","libp2p-ipfs":"libp2p-ipfs-browser"}},"externals":{"fs":"{}","mkdirp":"{}"}}},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"3f9c2fad0791ad832887422a2261bdb67a53e3f1","_id":"ipfs@0.10.3","_shasum":"ae376b152fb1e45cb32cbf293ba7d20c2ed99cfc","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"ae376b152fb1e45cb32cbf293ba7d20c2ed99cfc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.10.3.tgz","integrity":"sha512-8R0JZyWPEBc125yL6QhE02M9UJKEMpxUGbfF+x0pJ1gktPJV8CtYnhvd+IpSslDEfKaJY2asoursarwBpYBlUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCohExcFuVE2JlHHVtcGie8COybyG4ZZX5YMQ1xx2VbaAIgO/PixbOmHlsKM/emyq9Q009ghtWKiZR9hPoIO3K4E7w="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.10.3.tgz_1464278079134_0.06504076952114701"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.11.0":{"name":"ipfs","version":"0.11.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.1.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.3.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.9.0","libp2p-ipfs-browser":"^0.8.0","libp2p-swarm":"^0.19.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"ba73ad8644d1cc77d7002ab10907ec5a24322c31","_id":"ipfs@0.11.0","_shasum":"686cd8046db91b936019fc2adf127744b34abeab","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"686cd8046db91b936019fc2adf127744b34abeab","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.11.0.tgz","integrity":"sha512-JyE7fjVe0YL44domWUaKU2+tltmoS3nV+jMSm00qoubBeMAVpWzPMZ8OOZjymQrZYYZjpkNgDQH/0jw5BjzmwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9xHHiIyQbOk3kB61IxKtsAo81stKw9UX0uii3WdwEmgIhAPu7lOF8O9TPML/hTY8os98VsVigyfF5NheR1kJnV0op"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.11.0.tgz_1464362959163_0.2132080881856382"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.11.1":{"name":"ipfs","version":"0.11.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:core:node":"TEST=core npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.2.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.1.5","left-pad":"^1.1.0","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-api":"^4.1.0","ipfs-bitswap":"^0.4.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.8.0","joi":"^8.0.5","libp2p-ipfs":"^0.10.1","libp2p-ipfs-browser":"^0.9.1","lodash.get":"^4.3.0","lodash.set":"^4.2.0","mafmt":"^2.1.1","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"57555d21845cf04098640ac50a5b51e9d6c45b56","_id":"ipfs@0.11.1","_shasum":"2e45cdfa054f531c1a3dae8d2c10f3c109edb311","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"2e45cdfa054f531c1a3dae8d2c10f3c109edb311","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.11.1.tgz","integrity":"sha512-GF61Q2lo8MZ9JJU9VkwZfEzrDDjb4/m6gSCu2Z5Rt2WT3NTRv/RZ6YyrQb62D72c3kItHQ5Fzq8JhSYMNA16+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPI4R2Tk7SXwi3XgtsvzewI88vlaKHtavAo5DVkiLF4gIhAJq+yxc1XDNDXkrEsWCc8yq4ExDWRqEIuQZycLkBueJd"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.11.1.tgz_1464619911578_0.8687067348510027"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.12.0":{"name":"ipfs","version":"0.12.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:core:node":"TEST=core npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.2.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.2.2","left-pad":"^1.1.0","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-bitswap":"^0.4.1","ipfs-api":"^5.0.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.9.0","isstream":"^0.1.2","joi":"^8.0.5","libp2p-ipfs":"^0.11.0","libp2p-ipfs-browser":"^0.10.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","mafmt":"^2.1.1","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3","through2":"^2.0.1"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"0aebd4725c89a705a42051791810e0f7de73eab4","_id":"ipfs@0.12.0","_shasum":"6736a870e32028498fcaefde3178ac33b34b0679","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},"dist":{"shasum":"6736a870e32028498fcaefde3178ac33b34b0679","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.12.0.tgz","integrity":"sha512-lmps9um2jmwuaGDbWQWcjfODm9Jmru2coM6MTaLnFGQwm1fztnbUu/941k+cMpSqStV0kdBTSZTuD2nG5c+sfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIClFiUtSCyu5vfihqyUoEpU6PFhOrlAKhyDMNFIX6yVpAiBvWjSykTJqsBJ1yWq0/bz3K7zL+aI1XgsYZqJBxYZOWw=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.12.0.tgz_1465239368609_0.6931814318522811"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.13.0":{"name":"ipfs","version":"0.13.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:core:node":"TEST=core npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.2.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.3.0","left-pad":"^1.1.0","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-bitswap":"^0.4.1","ipfs-api":"^6.0.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs-engine":"^0.9.0","isstream":"^0.1.2","joi":"^8.0.5","libp2p-ipfs":"^0.11.0","libp2p-ipfs-browser":"^0.10.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","mafmt":"^2.1.1","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3","through2":"^2.0.1"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"b19c12f95b05b8c458bd106aa1b042e61bcbbc03","_id":"ipfs@0.13.0","_shasum":"79a255092000509f59b7b21700844b9271788330","_from":".","_npmVersion":"3.8.9","_nodeVersion":"4.4.4","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"79a255092000509f59b7b21700844b9271788330","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.13.0.tgz","integrity":"sha512-ksJiLKMsQkAMhn/8nEVSCaWBwKhq68t0lH3IOfbWx67lq+K3rWZ3h7rH/1af8moc7GML5X5Y0EQc7lY2X0j2jw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMq08sgzJ6UIxVUyFcUGFRFWYhNWhGkIK/rmA4+NmTdAiEAvFPCb31S4rxRlVH8ZjvQS5qWTa3P2P7o3kPCENnQDnI="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.13.0.tgz_1465296123185_0.9724779594689608"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.14.0":{"name":"ipfs","version":"0.14.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:core:node":"TEST=core npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.2.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.3.0","left-pad":"^1.1.0","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-bitswap":"^0.6.0","ipfs-api":"^6.0.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.9.0","isstream":"^0.1.2","joi":"^8.0.5","libp2p-ipfs":"^0.12.0","libp2p-ipfs-browser":"^0.12.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","mafmt":"^2.1.1","multihashes":"^0.2.2","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3","through2":"^2.0.1"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Benet","email":"juan@benet.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"5862ea93aa8f9271c80e3fad4b9f3da8b155af79","_id":"ipfs@0.14.0","_shasum":"85bd806b22fd54f56f796a5c6797d4b4db0e11cc","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"85bd806b22fd54f56f796a5c6797d4b4db0e11cc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.14.0.tgz","integrity":"sha512-3nV/M5EnSJDA5O1/j4vAdOvx4HpH51O4mJz6ZO8lWp9L4ctelfuvLOyJpAPWNva4d2a7qJr2m7Ek8s5QKjvz3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjLXKZzhaxjJFEWDof849F1pw+ykTgrZGcmN5UbHZNXAIgAdmKvVLAaod50QWbENNu+jcd0UVQmhFZ4iO4W8kDyVI="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.14.0.tgz_1467047143609_0.9398993710055947"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.14.1":{"name":"ipfs","version":"0.14.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^3.2.0","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc3","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.3.0","left-pad":"^1.1.0","lodash":"^4.11.2","mocha":"^2.5.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.2","rimraf":"^2.5.2","stream-to-promise":"^1.1.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.9.0","bl":"^1.1.2","boom":"^3.1.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.3","hapi":"^13.4.1","ipfs-bitswap":"^0.6.0","ipfs-api":"^6.0.1","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.10.0","isstream":"^0.1.2","joi":"^8.0.5","libp2p-ipfs":"^0.12.0","libp2p-ipfs-browser":"^0.12.0","lodash.get":"^4.3.0","lodash.set":"^4.2.0","mafmt":"^2.1.1","multihashes":"^0.2.2","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3","through2":"^2.0.1"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Benet","email":"juan@benet.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"76bf64de23b48ea63befa7dc5b86075db4a8d3ae","_id":"ipfs@0.14.1","_shasum":"4fc1b184acde1c484a5ff66bef6d4d32d3b3ac5b","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"4fc1b184acde1c484a5ff66bef6d4d32d3b3ac5b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.14.1.tgz","integrity":"sha512-mgHsUS1O81t7QUj9GEVQOfWKbJw+9fzghojOMt4oAQ8zt9Ur/wYL+QgdGHZhXKpPkCaIUwSKTJtvyEEzCloi0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGh8JZbg+AgvSwiGjm71+TcmTi/mRkhtjol6KGu+M+YaAiAGiEF9dpbD3nk+bCu2PSpUxiNm0jJjHbeum3XiZ1lmQA=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.14.1.tgz_1467219638231_0.7728388849645853"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.14.2":{"name":"ipfs","version":"0.14.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^5.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc4","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.5.0","left-pad":"^1.1.1","lodash":"^4.14.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.11.6","bl":"^1.1.2","boom":"^3.2.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.5","hapi":"^14.0.0","ipfs-bitswap":"^0.6.0","ipfs-api":"^6.0.3","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.2","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.10.1","isstream":"^0.1.2","joi":"^9.0.4","libp2p-ipfs":"^0.12.1","libp2p-ipfs-browser":"^0.12.1","lodash.get":"^4.4.0","lodash.set":"^4.3.0","mafmt":"^2.1.1","multihashes":"^0.2.2","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3","through2":"^2.0.1"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Benet","email":"juan@benet.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"31e926bc1201c4e5a9d3d6d78aff837d07ee2c91","_id":"ipfs@0.14.2","_shasum":"1dda01b919c20af9d560c923a70cf1ed28ef207a","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"1dda01b919c20af9d560c923a70cf1ed28ef207a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.14.2.tgz","integrity":"sha512-B55qm3IZcWgW54bFAsdQ1gALs5rKLHjPimI9lu4FVzG59cbSHsIq1Qp9QmIrK2UKkTTocvlEa8hRJlyKuunj0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXbAO9w6b0f7Dtk/RKpvBk5tzpIfaHPysnwdyvnUV26QIhANfEsKASf9gSNrAktxLDhiaZrPb3y7nOiAv6LwtQThu0"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.14.2.tgz_1470750315397_0.5303213479928672"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.14.3":{"name":"ipfs","version":"0.14.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^5.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.0-rc4","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.6.0","left-pad":"^1.1.1","lodash":"^4.14.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.11.6","bl":"^1.1.2","boom":"^3.2.2","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-blob-store":"^5.2.1","glob":"^7.0.5","hapi":"^14.0.0","ipfs-bitswap":"^0.6.0","ipfs-api":"^6.0.3","ipfs-block":"^0.3.0","ipfs-block-service":"^0.4.0","ipfs-merkle-dag":"^0.6.2","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.8.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.10.1","isstream":"^0.1.2","joi":"^9.0.4","libp2p-ipfs":"^0.12.1","libp2p-ipfs-browser":"^0.12.1","lodash.get":"^4.4.0","lodash.set":"^4.3.0","mafmt":"^2.1.1","multihashes":"^0.2.2","multiaddr":"^2.0.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.0","promisify-es6":"^1.0.1","readable-stream":"1.1.13","ronin":"^0.3.11","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","temp":"^0.8.3","through2":"^2.0.1"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Benet","email":"juan@benet.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"}],"gitHead":"8b7194deafd2e9b1fb3106c12d8352b079fa7a20","_id":"ipfs@0.14.3","_shasum":"76f5737ff9adec6fe0091747aecc95228ffd3503","_from":".","_npmVersion":"3.8.7","_nodeVersion":"4.3.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"76f5737ff9adec6fe0091747aecc95228ffd3503","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.14.3.tgz","integrity":"sha512-aPwHE6A25xaVCyf63z/vpVC4djGK1MB89x963C0C7eLob7bUDPfaZBV8cStmKgZ1uac3lipMtTi3NL/AFbS0tg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFseoRbra90cQD4RFTVLqJMAtpESdoyZt9DODNd+1+1LAiEAm8+FZR7lpUSJAjwfo3vYZClA2jFBCQMhu0OXxD+EJMg="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.14.3.tgz_1470819501693_0.26550381327979267"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.15.0":{"name":"ipfs","version":"0.15.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"PHANTOM=off gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"PHANTOM=off gulp test:browser","build":"gulp build","release":"PHANTOM=off gulp release","release-minor":"PHANTOM=off gulp release --type minor","release-major":"PHANTOM=off gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^8.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.1","fs-pull-blob-store":"^0.3.0","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","idb-pull-blob-store":"^0.4.0","interface-ipfs-core":"^0.14.4","left-pad":"^1.1.1","lodash":"^4.15.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.11.6","bl":"^1.1.2","boom":"^4.0.0","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","glob":"^7.0.6","hapi":"^15.0.3","ipfs-api":"^8.0.3","ipfs-bitswap":"^0.7.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.5.0","ipfs-merkle-dag":"^0.7.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.9.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.11.2","isstream":"^0.1.2","joi":"^9.0.4","libp2p-ipfs":"^0.13.0","libp2p-ipfs-browser":"^0.14.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","mafmt":"^2.1.2","map-limit":"0.0.1","multiaddr":"^2.0.3","multihashes":"^0.2.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.1","promisify-es6":"^1.0.1","pull-file":"^1.0.0","pull-paramap":"^1.1.6","pull-sort":"^1.0.0","pull-stream":"^3.4.5","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.0","read-pkg-up":"^1.0.1","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","stream-to-pull-stream":"^1.7.0","temp":"^0.8.3","through2":"^2.0.1","update-notifier":"^1.0.2","yargs":"^5.0.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Juan Benet","email":"juan@benet.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"61c00cd264cee796a79bed823360c898089dfe03","_id":"ipfs@0.15.0","_shasum":"faecc9417aac1f0a60d22ae28a0c9498a4fcee97","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"faecc9417aac1f0a60d22ae28a0c9498a4fcee97","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.15.0.tgz","integrity":"sha512-erehAApZmXUleX9isTGqueDLtDgEJsJuBtc86nD34h8G3BbVfwX9woxiJP4KocfsDDndvN/RhsT6ieT+CdRnVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDda/tRAlMRN1u/e35Rsko5u78IxZ2OfCGW1hpjp2rJMAIgLipMsfFAvyNjwGXnypN33Fi8ExQq2jhbzfdxIeT6bdc="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.15.0.tgz_1473459693891_0.527769873617217"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.16.0":{"name":"ipfs","version":"0.16.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"PHANTOM=off gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"PHANTOM=off gulp test:browser","build":"gulp build","release":"PHANTOM=off gulp release","release-minor":"PHANTOM=off gulp release --type minor","release-major":"PHANTOM=off gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^8.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","expose-loader":"^0.7.1","form-data":"^1.0.1","fs-pull-blob-store":"^0.3.0","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","idb-pull-blob-store":"^0.4.0","interface-ipfs-core":"^0.15.0","left-pad":"^1.1.1","lodash":"^4.15.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"babel-runtime":"^6.11.6","bl":"^1.1.2","boom":"^4.0.0","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","glob":"^7.0.6","hapi":"^15.0.3","ipfs-api":"^9.0.0","ipfs-bitswap":"^0.7.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.5.0","ipfs-merkle-dag":"^0.7.3","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.9.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.11.3","isstream":"^0.1.2","joi":"^9.0.4","libp2p-ipfs":"^0.14.1","libp2p-ipfs-browser":"^0.15.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","map-limit":"0.0.1","multiaddr":"^2.0.3","multihashes":"^0.2.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.1","promisify-es6":"^1.0.1","pull-file":"^1.0.0","pull-paramap":"^1.1.6","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.4.5","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.0","read-pkg-up":"^1.0.1","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","stream-to-pull-stream":"^1.7.0","temp":"^0.8.3","through2":"^2.0.1","update-notifier":"^1.0.2","yargs":"^5.0.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"a07f16e3b09001d3a88b4b78b9dcab0d5826abb4","_id":"ipfs@0.16.0","_shasum":"f5605a281b9957319e692dfc0c9b0199dfe72bf2","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"f5605a281b9957319e692dfc0c9b0199dfe72bf2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.16.0.tgz","integrity":"sha512-NyaCluGjVX9fuj11xhSkCraS0w5WK0LtOIVOR/wcN6Tasmsmgih25gbgtEcbL2Wu4Z1qeSaifkEPY34qtJC6oQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8+uuBrm+k+0v7f4D69Tihrs72mSH90z2+d00btW7+qAiAxD85R6WQ+dPeEvJX7K6CKjDRp/f8HdWtLQFq+BYwbRg=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.16.0.tgz_1473965298951_0.869011941133067"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.17.0":{"name":"ipfs","version":"0.17.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"lib/core/index.js","jsnext:main":"src/core/index.js","scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"PHANTOM=off gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"PHANTOM=off gulp test:browser","build":"gulp build","release":"PHANTOM=off gulp release","release-minor":"PHANTOM=off gulp release --type minor","release-major":"PHANTOM=off gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^8.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.0.0","fs-pull-blob-store":"^0.3.0","gulp":"^3.9.1","idb-plus-blob-store":"^1.1.2","interface-ipfs-core":"^0.15.0","left-pad":"^1.1.1","lodash":"^4.15.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.0.1","babel-runtime":"^6.11.6","bl":"^1.1.2","boom":"^4.0.0","bs58":"^3.0.0","debug":"^2.2.0","detect-node":"^2.0.3","fs-pull-blob-store":"^0.3.0","glob":"^7.0.6","hapi":"^15.0.3","idb-pull-blob-store":"^0.4.0","ipfs-api":"^9.0.0","ipfs-bitswap":"^0.7.0","ipfs-block":"^0.3.0","ipfs-block-service":"^0.5.0","ipfs-merkle-dag":"^0.7.3","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.9.0","ipfs-unixfs":"^0.1.4","ipfs-unixfs-engine":"^0.11.3","isstream":"^0.1.2","joi":"^9.0.4","libp2p-ipfs":"^0.14.1","libp2p-ipfs-browser":"^0.15.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","map-limit":"0.0.1","multiaddr":"^2.0.3","multihashes":"^0.2.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.7.0","peer-info":"^0.7.1","promisify-es6":"^1.0.1","pull-file":"^1.0.0","pull-paramap":"^1.1.6","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.4.5","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.0","read-pkg-up":"^1.0.1","run-parallel":"^1.1.6","run-parallel-limit":"^1.0.3","run-series":"^1.1.4","run-waterfall":"^1.1.3","stream-to-pull-stream":"^1.7.0","temp":"^0.8.3","through2":"^2.0.1","update-notifier":"^1.0.2","yargs":"^6.0.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"7e3066774f7fb9de5fdecaf8b4c58478007166ff","_id":"ipfs@0.17.0","_shasum":"c3ddf602cac23b835d2ce1a4445d7754dd10ec6f","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"c3ddf602cac23b835d2ce1a4445d7754dd10ec6f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.17.0.tgz","integrity":"sha512-pUI+o2qo4I29Klh0BZrjRTRmT23mC0IpWt3yM1Hpcb1e/Pj9dtV618K7X5Uhzmdz0siu+jDcPqfYPZwnF6GEkA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHxgTCY1Xla1G5MSVwBEVKpavSvlMfvSWTPoZ3JZW5dECIAhfO/QHiiq0wNn+kr+ENvNLBbsxVf9ecVl1NObU2VPR"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/ipfs-0.17.0.tgz_1476073761521_0.6338078496046364"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.18.0":{"name":"ipfs","version":"0.18.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.1.1","buffer-loader":"0.0.1","chai":"^3.5.0","detect-node":"^2.0.3","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.18.4","left-pad":"^1.1.3","lodash":"^4.16.6","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.2","bl":"^1.1.2","boom":"^4.2.0","debug":"^2.3.2","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^15.2.0","hapi-set-header":"^1.0.2","idb-pull-blob-store":"^0.5.1","ipfs-api":"^11.1.0","ipfs-bitswap":"^0.8.1","ipfs-block":"^0.5.0","ipfs-block-service":"^0.7.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.1","ipfs-unixfs":"^0.1.5","ipfs-unixfs-engine":"^0.13.0","ipld-resolver":"^0.2.0","isstream":"^0.1.2","joi":"^9.2.0","libp2p-ipfs":"^0.15.0","libp2p-ipfs-browser":"^0.16.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.0.3","multihashes":"^0.2.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.0","peer-info":"^0.8.0","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"^1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.1","update-notifier":"^1.0.2","yargs":"^6.3.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"d7f945617f72153489d8836fd916c82abc53f9db","_id":"ipfs@0.18.0","_shasum":"8a1254bbbd1e9cb3f77fc6c66aee856b566a9189","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"8a1254bbbd1e9cb3f77fc6c66aee856b566a9189","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.18.0.tgz","integrity":"sha512-B6VJymUJUZepO+iLx5edJJS4/Unn5bD5mVrhKDzDkoGyjF3joK4d08YWulKABdfhKSR0uZNEhDNncRoQI1xnDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBG3DT0aN4J/lSctU6rHLNbnnf8+FNTNlLcED+4q6+ZuAiEA2kjkvqSTqjcfqbEeLm5ZverDV/oBr/TfOc7u97eot/s="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.18.0.tgz_1478921291855_0.3061662020627409"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.19.0":{"name":"ipfs","version":"0.19.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.1.2","buffer-loader":"0.0.1","chai":"^3.5.0","detect-node":"^2.0.3","eslint-plugin-react":"^6.7.1","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.22.0","left-pad":"^1.1.3","lodash":"^4.17.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.1.2","boom":"^4.2.0","debug":"^2.3.3","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^15.2.0","hapi-set-header":"^1.0.2","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.0.0","ipfs-bitswap":"^0.8.1","ipfs-block":"^0.5.0","ipfs-block-service":"^0.7.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.1","ipfs-unixfs":"^0.1.5","ipfs-unixfs-engine":"^0.14.0","ipld-resolver":"^0.3.0","isstream":"^0.1.2","joi":"^10.0.1","libp2p-ipfs":"^0.15.0","libp2p-ipfs-browser":"^0.16.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.1.1","multihashes":"^0.2.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.0","peer-info":"^0.8.1","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.1","update-notifier":"^1.0.2","yargs":"^6.4.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"1977fa7540aea28a3402ee60d09d6cae817e5aaa","_id":"ipfs@0.19.0","_shasum":"cc947d78c677fa41b4f047c7c837f4a6052ab0b3","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"cc947d78c677fa41b4f047c7c837f4a6052ab0b3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.19.0.tgz","integrity":"sha512-XYKoMMxw8fJw9yHhPD/G0/rzEWq0UIhAryy4fIzlBC2eHVgrG1oVEiTrncigiPWp+D8ElP6iet+GjJybDRo6Pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN+BD8/7cTpY4th2MxLwBaC7scVWI5E2MXZ4nW0WOVdwIhAIRQdPn1BvMqRnRz3N4IlUEr1YCtwOoEP3vqf/uj8tJ3"}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.19.0.tgz_1480124880784_0.8926507141441107"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.20.1":{"name":"ipfs","version":"0.20.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.1.2","buffer-loader":"0.0.1","chai":"^3.5.0","detect-node":"^2.0.3","eslint-plugin-react":"^6.7.1","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.22.0","left-pad":"^1.1.3","lodash":"^4.17.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.1.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.1.2","boom":"^4.2.0","debug":"^2.3.3","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^15.2.0","hapi-set-header":"^1.0.2","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.0.0","ipfs-bitswap":"^0.8.1","ipfs-block":"^0.5.0","ipfs-block-service":"^0.7.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.1","ipfs-unixfs":"^0.1.8","ipfs-unixfs-engine":"^0.14.0","ipld-resolver":"^0.3.0","isstream":"^0.1.2","joi":"^10.0.1","libp2p-ipfs-nodejs":"^0.16.0","libp2p-ipfs-browser":"^0.17.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.1.1","multihashes":"^0.3.0","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.0","peer-info":"^0.8.1","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.2","update-notifier":"^1.0.2","yargs":"^6.4.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"1a946995817b224b134bf9fb4e230d17c194901d","_id":"ipfs@0.20.1","_shasum":"cc1feab2ee7c93f347fa99b4ad87e6aa056bb38b","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"cc1feab2ee7c93f347fa99b4ad87e6aa056bb38b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.20.1.tgz","integrity":"sha512-4tvkmwo4FOJ36yKcoM7ig83eGKWi1PVfwnAKOzgMtMN1d5znJFbBtzTHG6e5OIAQXN1vhwtzeHkE0wd0daLRZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCByX5bbzmn4yT6kFNUR+IqKbK3UHPcprCnxLBKvBD43QIgeqgObdPdjx9azXhgi3SipheC0VxpB0D36uMZBRnMLVs="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.20.1.tgz_1480331871005_0.1856013680808246"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.20.2":{"name":"ipfs","version":"0.20.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.2.1","buffer-loader":"0.0.1","chai":"^3.5.0","detect-node":"^2.0.3","eslint-plugin-react":"^6.8.0","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.22.0","left-pad":"^1.1.3","lodash":"^4.17.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.1.2","boom":"^4.2.0","debug":"^2.3.3","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.0.1","hapi-set-header":"^1.0.2","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.0.3","ipfs-bitswap":"^0.8.2","ipfs-block":"^0.5.1","ipfs-block-service":"^0.7.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.1","ipfs-unixfs":"^0.1.8","ipfs-unixfs-engine":"^0.14.1","ipld-resolver":"^0.4.0","isstream":"^0.1.2","joi":"^10.0.5","libp2p-ipfs-nodejs":"^0.16.4","libp2p-ipfs-browser":"^0.17.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.1.1","multihashes":"^0.3.0","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.0","peer-info":"^0.8.1","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"42525596f518aee7946f9c2a60b7652ffaa595ea","_id":"ipfs@0.20.2","_shasum":"70e71bd4db5d8820977adae9e26f741d498695b4","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"70e71bd4db5d8820977adae9e26f741d498695b4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.20.2.tgz","integrity":"sha512-y1hG5u56kNUOSS06v/owLP+/2IEfRS68s0gcweN+AUXKBNOSv716Smb4pfeFGOBtKCjHk/fffyDyJ1jxX+KaWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFSqcrW288tc2AcYlagl52O4xCzVTX2Ob+YUBUmQIjQXAiBkDiSEvTbg+grZz6kIBJIy0y+cnDhnnG5bS5cjRouCrg=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.20.2.tgz_1481302940714_0.07927640643902123"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.20.3":{"name":"ipfs","version":"0.20.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"gulp test:node","test:node:core":"TEST=core npm run test:node","test:node:http":"TEST=http npm run test:node","test:node:cli":"TEST=cli npm run test:node","test:browser":"gulp test:browser","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.2.1","buffer-loader":"0.0.1","chai":"^3.5.0","detect-node":"^2.0.3","eslint-plugin-react":"^6.8.0","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.22.0","left-pad":"^1.1.3","lodash":"^4.17.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.1.2","boom":"^4.2.0","debug":"^2.3.3","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.0.1","hapi-set-header":"^1.0.2","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.0.3","ipfs-bitswap":"^0.8.2","ipfs-block":"^0.5.1","ipfs-block-service":"^0.7.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.1","ipfs-unixfs":"^0.1.8","ipfs-unixfs-engine":"^0.14.1","ipld-resolver":"^0.4.0","isstream":"^0.1.2","joi":"^10.0.5","libp2p-ipfs-nodejs":"^0.16.4","libp2p-ipfs-browser":"^0.17.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.1.1","multihashes":"^0.3.0","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.0","peer-info":"^0.8.1","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"209c78fc3f081e1b934f83ac5522ef30fb820ef0","_id":"ipfs@0.20.3","_shasum":"b94c5f1d79d349046ac81d54806c20186953efa6","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"b94c5f1d79d349046ac81d54806c20186953efa6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.20.3.tgz","integrity":"sha512-1QImjou4EOHwZ3Piy3WccM0Lxivbz6IWusWGLSHeOUbRyijjNSItYCVLMRfuFnxCF1uCLtw/uweEnfZXS8qCaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIb/3pPiDHdGVyTVjsyNbPGUnVqmAEvFV8t2nliWO8aQIhAMSyDUJ+Xt8Nhpd6ffFqHDveB12TZQRgFPPPphjoNHhW"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.20.3.tgz_1481322606414_0.5288891568779945"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.20.4":{"name":"ipfs","version":"0.20.4","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.3.0","buffer-loader":"0.0.1","chai":"^3.5.0","detect-node":"^2.0.3","eslint-plugin-react":"^6.8.0","execa":"^0.5.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.0","ipfsd-ctl":"^0.18.0","left-pad":"^1.1.3","lodash":"^4.17.2","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.5.1","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.0.2","hapi-set-header":"^1.0.2","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.2","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.14.2","ipld-resolver":"^0.4.1","isstream":"^0.1.2","joi":"^10.0.6","libp2p-ipfs-nodejs":"^0.17.1","libp2p-ipfs-browser":"^0.17.3","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.1.1","multihashes":"^0.3.1","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"greenkeeperio-bot","email":"support@greenkeeper.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"5872f9e33501b157b2d687c5036d82de7395f046","_id":"ipfs@0.20.4","_shasum":"926fe00e11061d805fd7ceb6aadc963d76c393d9","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"926fe00e11061d805fd7ceb6aadc963d76c393d9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.20.4.tgz","integrity":"sha512-jeLCZiDPzlcuPVX99qAv1HPUYeo7yKeR8RFkjVVcveevLy1hl7bRegS1EJksdWA0Qg4b/BzQBWkm9rbtAJHESA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5ZTp8g7Zc3PnQ2PrbTtEuF7EvhZ0mR4Cn0Itk7p8qHgIgXn7xsscTyacIeD9ktHBdbXvX2hH3BFwCNWsEGr/wVpM="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.20.4.tgz_1482764347855_0.9236507555469871"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.0":{"name":"ipfs","version":"0.21.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.3.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.4","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.0","ipld-resolver":"^0.4.1","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.1.0","libp2p-ipfs-nodejs":"^0.17.3","libp2p-ipfs-browser":"^0.17.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.2","multiaddr":"^2.1.3","multihashes":"^0.3.1","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"cfd8e4071b63a6aa08a198dc4b7d1da8b19a7293","_id":"ipfs@0.21.0","_shasum":"13c000b83f0dc1f4a6331df1e1bb0cabb3230cda","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"dist":{"shasum":"13c000b83f0dc1f4a6331df1e1bb0cabb3230cda","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.0.tgz","integrity":"sha512-mfBvf+h8k1WBVq/yLfEyBfIutGC0mymbz/x6xzAlewow/0ZM4ikLAIOGAS/kbiR34CuuKyG/ZoaDk7RDcR9Mog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFKYab4g9fi6fJftD5zlM2SMwnOOX2mTfay8JVph+imbAiEA1yQRx0nV7XlyQAbRqWOA7t+M2FUJti27gVuBNPkcxoU="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.0.tgz_1484654359332_0.43899319996125996"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.1":{"name":"ipfs","version":"0.21.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.3.3","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.0","ipld-resolver":"^0.4.1","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.6","libp2p-ipfs-browser":"^0.17.6","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.1","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"e1ab5be52b33ec4b2c24d51bf26ab429fc1c0999","_id":"ipfs@0.21.1","_shasum":"32be70aa6fe80a128199856d9007f2d37dff80c0","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"32be70aa6fe80a128199856d9007f2d37dff80c0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.1.tgz","integrity":"sha512-5vPSsZxKc96dYQ0PCADcCmIw8aBfJROqICKU0kXpBjKY2CSKwfFZmAZYrz2RrFKDo1gyfHqurAh9iKW5l67HKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDB5fBsN2IHwW7nwIAOx76RIUDaGqP6BAch0i1kB+JcDQIgVfzBw/5/O+tuldHpFDAXch2C+ykYUsJp0kHeQfyg16A="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.1.tgz_1485157579791_0.2768178656697273"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.2":{"name":"ipfs","version":"0.21.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.3.3","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.0","ipld-resolver":"^0.4.1","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.6","libp2p-ipfs-browser":"^0.17.6","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.1","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"eaa376569335c3417556eaceaf92a788209b0485","_id":"ipfs@0.21.2","_shasum":"296d2fdd2940a7e2f88bac79dcffea15b3dac986","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"296d2fdd2940a7e2f88bac79dcffea15b3dac986","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.2.tgz","integrity":"sha512-wdHl9tpysdwojY2/PC3AJKOYZkilORkwCRnC2reacfkb8BLSvlMAH48JlfGxBq0OIaWFGX57jpcmrX9WYJgU7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICfpuKNzDZj0VbIJYzo2lc/vSamKlM/qDjzVHc4Yj7yiAiEApi7sQdhxOfeZP+HgoCS+oxMa5pCeKRuthPQklj5fRz0="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.2.tgz_1485165087455_0.9044243053067476"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.3":{"name":"ipfs","version":"0.21.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/temp-repo.js":"./test/utils/temp-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.3.3","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.0","ipld-resolver":"^0.4.1","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.7","libp2p-ipfs-browser":"^0.17.6","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.1","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"38603de08e179513d0a9b473b375e04c81923264","_id":"ipfs@0.21.3","_shasum":"58521fe0f7fc81e90a6eca4d3a7f40068317809b","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"58521fe0f7fc81e90a6eca4d3a7f40068317809b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.3.tgz","integrity":"sha512-DPtBaL1Cfag+lZz8mAXqtHZbERxpMrmX391SVQKTiHYCo5wmEDPBEt257eTwjiMjUxxudsomfopJSRiO5/nJCg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVn1antuZODzca7gaulv1X4T92C20cblO8XJ0rvyxwnAiEAt9cv6hZgBBKcatyLtxn5BWNXcxSA7EGehRlbFXYx220="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.21.3.tgz_1485357915806_0.8047528357710689"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.4":{"name":"ipfs","version":"0.21.4","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.4.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.0","ipld-resolver":"^0.4.1","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.8","libp2p-ipfs-browser":"^0.17.7","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"8b1c55d7ed791002dbd6c9d62e9b43dfb681eb5d","_id":"ipfs@0.21.4","_shasum":"bf761489393334ffd24706a3b808f61e554492d8","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"bf761489393334ffd24706a3b808f61e554492d8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.4.tgz","integrity":"sha512-fZHlho4RXAr04zXG7cpNKP3NK3qbcf1iO6H0VZS877tjhk/MTJr801mRZ94ivRbzlxEwJzZlFAICpuZ2VQWkKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHNC1Fqguvy0zjckKmp+zG/cnZqtGBX+f8gDT29rg/4IAiA/uqmmspVbO/d+gyFd4Q5kp2l/rvt6mAGquQhrVuOS8Q=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.4.tgz_1485640933088_0.9293143998365849"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.5":{"name":"ipfs","version":"0.21.5","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.4.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.0","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.0","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.0","ipld-resolver":"^0.4.1","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.8","libp2p-ipfs-browser":"^0.17.7","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"7999b9d61605dccc7b8e77cff778dcf8cf7b824c","_id":"ipfs@0.21.5","_shasum":"1d08d50127f49d9bfe9dc3d1f278d4231917f351","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"1d08d50127f49d9bfe9dc3d1f278d4231917f351","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.5.tgz","integrity":"sha512-w7Lmv5C42rbPq+9h+xGZGy9o+HhMLl0uS9sgMvkPQ8yWRTukkZCP4w7VXoLnbUwwcq2NQrAO0TJONDhZGox/2w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICW7r9zgdourNe3Q/vkJwEZCnh7XsouPziLOhaoGGtBsAiBPFL5tlvJ4jQGRJLHFVuiniTKPULI4G3i+a79PnNi4rA=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.21.5.tgz_1485675328675_0.2884450920391828"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.6":{"name":"ipfs","version":"0.21.6","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.4.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.2","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.1","ipld-resolver":"^0.4.2","isstream":"^0.1.2","libp2p-floodsub":"0.7.1","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.9","libp2p-ipfs-browser":"^0.17.8","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"bc213fc919f31f719593e59b9723c94ae8f79667","_id":"ipfs@0.21.6","_shasum":"78492bab3ea1f0cd25bd0f9d8fbe76a6a0dff16b","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"78492bab3ea1f0cd25bd0f9d8fbe76a6a0dff16b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.6.tgz","integrity":"sha512-tWX1ZDkoUxEoLrQ3SMp4uMfIBHYnYcj4sFkZM56KyresbSOB6YKJBDoll2/Z04HmFAXuI4mIh86iYTWwX2xxRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJv6//pFHKdlvb3WoflgpW2N0RgYyvm4tPN5HF2C87pAiEAmeYd5BagdUtZU8ysz1w2RFasr1gQSGZ5umsz5qoIZuE="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.6.tgz_1485712872797_0.38144327886402607"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.7":{"name":"ipfs","version":"0.21.7","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.4.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.2","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.2","ipld-resolver":"^0.4.3","isstream":"^0.1.2","libp2p-floodsub":"0.7.2","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.9","libp2p-ipfs-browser":"^0.17.8","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"02efd7cd451b2f8efcd3a7381f3971389d05e3f8","_id":"ipfs@0.21.7","_shasum":"d956bf755c886df6b080b087427b9198ef1eb18d","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"d956bf755c886df6b080b087427b9198ef1eb18d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.7.tgz","integrity":"sha512-nXnf7AN8C6DgPNUNIcCrmbwiFWQQe4rGGyhr92cnlljH7WoYzeORwtso0fl28TGHPQeHCDCdibCZNRkJqkPvTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0F9500HG9hctGsK93K6gWlYvGSwRO/9XQOJmfPDWKtAiA0wz6haZ7kfaox/BsTGaWqlwsHFmeyVaw/0qvQSkCwuA=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.7.tgz_1485791326651_0.21195523301139474"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.21.8":{"name":"ipfs","version":"0.21.8","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^9.4.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.1","form-data":"^2.1.2","fs-pull-blob-store":"^0.4.1","gulp":"^3.9.1","interface-ipfs-core":"^0.23.5","ipfsd-ctl":"^0.18.1","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.0","fs-pull-blob-store":"^0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"^0.5.1","ipfs-api":"^12.1.4","ipfs-bitswap":"^0.9.2","ipfs-block":"^0.5.4","ipfs-block-service":"^0.8.1","ipfs-multipart":"^0.1.0","ipfs-repo":"^0.11.2","ipfs-unixfs":"^0.1.9","ipfs-unixfs-engine":"^0.15.4","ipld-resolver":"^0.4.3","isstream":"^0.1.2","libp2p-floodsub":"0.7.2","joi":"^10.2.0","libp2p-ipfs-nodejs":"^0.17.9","libp2p-ipfs-browser":"^0.17.8","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","multiaddr":"^2.2.0","multihashes":"^0.3.2","path-exists":"^3.0.0","peer-book":"^0.3.0","peer-id":"^0.8.1","peer-info":"^0.8.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^1.0.3","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"}],"gitHead":"c2057363689bfd2218ca23ae2d2bdc4fe7742136","_id":"ipfs@0.21.8","_shasum":"05c5495f7441d433840cee4e80aed04fd93e450c","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"05c5495f7441d433840cee4e80aed04fd93e450c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.21.8.tgz","integrity":"sha512-SX/hF/OD/tVefxR/sy5gYpF/LHLusd48nFHYQL5edfNzqlP1qTAZIJYiyyiSXh9beZsNvdzl8jhgDyU5k0TAWA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBN02qg17b3hDxws2LxJi04R0ywQC4Udwp7hC3wbRycnAiBg6YyVmWQnJGdFUtS0FrMXSfdYQB7khqrqWZpYwXddzQ=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.21.8.tgz_1485892064846_0.22526149242185056"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.22.0":{"name":"ipfs","version":"0.22.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^10.0.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","dir-compare":"^1.3.0","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.3","form-data":"^2.1.2","fs-pull-blob-store":"~0.4.1","gulp":"^3.9.1","interface-ipfs-core":"~0.24.1","ipfsd-ctl":"~0.18.3","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","qs":"^6.3.0","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.1","fs-pull-blob-store":"~0.3.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"~0.5.1","ipfs-api":"^12.1.7","ipfs-bitswap":"~0.9.3","ipfs-block":"~0.5.5","ipfs-block-service":"~0.8.3","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.11.3","ipfs-unixfs":"~0.1.10","ipfs-unixfs-engine":"~0.17.0","ipld-resolver":"~0.9.0","isstream":"^0.1.2","joi":"^10.2.2","libp2p-floodsub":"~0.7.3","libp2p-ipfs-browser":"~0.18.3","libp2p-ipfs-nodejs":"~0.18.2","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","mkdirp":"^0.5.1","multiaddr":"^2.2.1","multihashes":"~0.3.3","path-exists":"^3.0.0","peer-book":"~0.3.1","peer-id":"~0.8.2","peer-info":"~0.8.3","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.0.0","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"568651dad92ce4a73b8b0530420aac723b141a4c","_id":"ipfs@0.22.0","_shasum":"a0ee50f420c2924dfe218884658d7502519a99c1","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"a0ee50f420c2924dfe218884658d7502519a99c1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.22.0.tgz","integrity":"sha512-2aDXoTRW/1R4pQjLseJAERNABtWiUHFXXJiQinhlPihTvrdOrSUsU/Xi2DpBXfbFzBNzDUfAoKuGangh6mR1BA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAECxrwfPozVJULxSSXz/MDBxcq+7/3JynNAnuxj9gQyAiBkHhrWoF0S/MQpHzqBWGFZdi0R2X3PBV9mR+JL5N6VwA=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.22.0.tgz_1487183132038_0.9735552906058729"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.22.1":{"name":"ipfs","version":"0.22.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.5-pre1"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^10.0.0","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^1.3.1","detect-node":"^2.0.3","dir-compare":"^1.3.0","eslint-plugin-react":"^6.9.0","execa":"^0.6.0","expose-loader":"^0.7.3","form-data":"^2.1.2","gulp":"^3.9.1","interface-ipfs-core":"~0.24.1","ipfsd-ctl":"~0.18.3","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.3.0","random-fs":"^1.0.3","rimraf":"^2.5.4","stream-to-promise":"^2.2.0","transform-loader":"^0.2.3"},"dependencies":{"async":"^2.1.4","bl":"^1.2.0","boom":"^4.2.0","debug":"^2.6.1","fs-pull-blob-store":"~0.4.1","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","idb-pull-blob-store":"~0.5.1","ipfs-api":"^12.1.7","ipfs-bitswap":"~0.9.4","ipfs-block":"~0.5.5","ipfs-block-service":"~0.8.3","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.11.3","ipfs-unixfs":"~0.1.10","ipfs-unixfs-engine":"~0.17.0","ipld-resolver":"~0.9.0","isstream":"^0.1.2","joi":"^10.2.2","libp2p-floodsub":"~0.7.3","libp2p-ipfs-browser":"~0.19.0","libp2p-ipfs-nodejs":"~0.19.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.6","mkdirp":"^0.5.1","multiaddr":"^2.2.1","multihashes":"~0.3.3","path-exists":"^3.0.0","peer-book":"~0.3.1","peer-id":"~0.8.2","peer-info":"~0.8.3","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.0.0","yargs":"^6.6.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"JGAntunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"fe710132443cf6ec852b918491e0f50ac89ab7e4","_id":"ipfs@0.22.1","_shasum":"c39582c69d20b79631440e5b56cdbe5211bc1bad","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.1","_npmUser":{"name":"dignifiedquire","email":"dignifiedquire@gmail.com"},"dist":{"shasum":"c39582c69d20b79631440e5b56cdbe5211bc1bad","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.22.1.tgz","integrity":"sha512-GHeB6IYAxfayQnegMDdttHHJMVYrP/ItEbFhJIPxzulDxlxnPUDFDgEka7NDfjFJTxOdhiSNitW5zj2Dy92LbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZ6jg3SKwVk2pPSUpa7DIpooTa3sLINEG6TYj6ozzrVAiBCnnxj8O7XNtWLzz+Ws66Sd0R9wVbO/r6HA8apWa4B4w=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ipfs-0.22.1.tgz_1487966469972_0.8684025313705206"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.23.0":{"name":"ipfs","version":"0.23.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.7"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser --dom","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser --dom","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release --dom","release-minor":"gulp release --type minor --dom","release-major":"gulp release --type major --dom","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.3.0","dirty-chai":"^1.2.2","eslint-plugin-react":"^6.10.3","execa":"^0.6.3","expose-loader":"^0.7.3","form-data":"^2.1.2","gulp":"^3.9.1","interface-ipfs-core":"~0.26.1","ipfsd-ctl":"~0.20.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.4.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.1.5","bl":"^1.2.0","boom":"^4.3.0","cids":"^0.4.2","debug":"^2.6.3","fsm-event":"^2.1.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","ipfs-api":"^13.0.0","ipfs-bitswap":"~0.10.0","ipfs-block":"~0.6.0","ipfs-block-service":"~0.9.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.13.0","ipfs-unixfs":"~0.1.11","ipfs-unixfs-engine":"~0.19.0","ipld-resolver":"~0.11.0","isstream":"^0.1.2","joi":"^10.3.0","libp2p-floodsub":"~0.7.5","libp2p-ipfs-browser":"~0.20.1","libp2p-ipfs-nodejs":"~0.20.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.7","mkdirp":"^0.5.1","multiaddr":"^2.2.2","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.3.1","peer-id":"~0.8.4","peer-info":"~0.8.4","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.3","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","safe-buffer":"^5.0.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.1.0","yargs":"7.0.2"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"2abd783c75586b03b48dd61009792a4619398fa2","_id":"ipfs@0.23.0","_shasum":"c414dacf779d563e2f01e8b595fefb9dcc008467","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"c414dacf779d563e2f01e8b595fefb9dcc008467","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.23.0.tgz","integrity":"sha512-SRm6fxLwmNkUkKhEeqe9r4p5IW/bmezDcvhDUpbBQ+aVnaKLFP1dkVoFMWTP6hdbASvfy3Ae4bl0n6HrVGWVWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlt2OheqegG3Y+BBE8pzeL/tRLOJwcXYslOG160L+WtQIgJYqzqPGt1w0JwEV+/rPtpuc/OYcMwOyKVVFWfjkma/k="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.23.0.tgz_1490356906606_0.03622731473296881"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.23.1":{"name":"ipfs","version":"0.23.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"go-ipfs":{"version":"v0.4.7"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser --dom","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser --dom","test:interop":"mocha -t 60000 test/interop","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release --dom","release-minor":"gulp release --type minor --dom","release-major":"gulp release --type major --dom","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.1","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.3.0","dirty-chai":"^1.2.2","eslint-plugin-react":"^6.10.3","execa":"^0.6.3","expose-loader":"^0.7.3","form-data":"^2.1.2","gulp":"^3.9.1","interface-ipfs-core":"~0.26.1","ipfsd-ctl":"~0.20.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.2.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.4.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.2.0","bl":"^1.2.0","boom":"^4.3.0","cids":"^0.4.2","debug":"^2.6.3","fsm-event":"^2.1.0","glob":"^7.1.1","hapi":"^16.1.0","hapi-set-header":"^1.0.2","hoek":"^4.1.0","ipfs-api":"^13.0.0","ipfs-bitswap":"~0.10.0","ipfs-block":"~0.6.0","ipfs-block-service":"~0.9.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.13.0","ipfs-unixfs":"~0.1.11","ipfs-unixfs-engine":"~0.19.0","ipld-resolver":"~0.11.0","isstream":"^0.1.2","joi":"^10.3.1","libp2p-floodsub":"~0.7.5","libp2p-ipfs-browser":"~0.20.1","libp2p-ipfs-nodejs":"~0.20.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.7","mkdirp":"^0.5.1","multiaddr":"^2.2.3","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.3.1","peer-id":"~0.8.4","peer-info":"~0.8.4","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.1","pull-pushable":"^2.0.1","pull-sort":"^1.0.0","pull-stream":"^3.5.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"1.1.14","safe-buffer":"^5.0.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.2","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.1.0","yargs":"7.0.2"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"670662e8f81a843b10575de367d2716f2029222f","_id":"ipfs@0.23.1","_shasum":"4a5f1b8683a94414a2fbaece72bf1ab75d0b9ac5","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"4a5f1b8683a94414a2fbaece72bf1ab75d0b9ac5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.23.1.tgz","integrity":"sha512-KjidnC4FVk6AVF3UpRC/pZsdAGiV5Z8Y4P9Ef1DpZ2jmi1SqpVdJfhbqZzf8vHStxCcV6KFg/U0DUl1tv3PJrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCndkp8+eCPl8hjleS+6UwliKzDujpVtbMnlkouQay1zQIhAIYI32g9ETOHoPApunqUWwKVJmFpiXI2keNlODc6aaDn"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ipfs-0.23.1.tgz_1490616467215_0.269500819966197"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.24.0":{"name":"ipfs","version":"0.24.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^3.5.0","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^1.2.2","eslint-plugin-react":"^7.0.1","execa":"^0.6.3","expose-loader":"^0.7.3","form-data":"^2.1.4","gulp":"^3.9.1","interface-ipfs-core":"~0.27.2","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.4.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.4.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.4.1","bl":"^1.2.1","boom":"^4.3.1","cids":"^0.5.0","debug":"^2.6.8","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.1.1","hapi-set-header":"^1.0.2","hoek":"^4.1.1","ipfs-api":"^14.0.2","ipfs-bitswap":"~0.13.1","ipfs-block":"~0.6.0","ipfs-block-service":"~0.9.1","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.13.1","ipfs-unixfs":"~0.1.11","ipfs-unixfs-engine":"~0.19.1","ipld-resolver":"~0.11.1","isstream":"^0.1.2","joi":"^10.5.0","libp2p-floodsub":"~0.9.4","libp2p-ipfs-browser":"~0.24.1","libp2p-ipfs-nodejs":"~0.25.2","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"^0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.4.0","peer-id":"~0.8.7","peer-info":"~0.9.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.0","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","safe-buffer":"^5.0.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.1.0","yargs":"8.0.1","readable-stream":"1.1.14"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"8dd84d0f396be2bf731ad40437120e23a2753482","_id":"ipfs@0.24.0","_shasum":"34add4172002e4ddf7def6aed8acd5447b714978","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"34add4172002e4ddf7def6aed8acd5447b714978","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.24.0.tgz","integrity":"sha512-8Hq/n/zkWlZAVwTNuhGG0E8QQYF8I5WL3m+jPZHTY45uj5tFh7oCy9P9Gx5oPCAOV0uICzI8Vk6r+frHVCtQSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh9SNfg2lTV6ZE/C0dY1KULZGlLkpnwrxV3VuE/DtbggIhAIJf+8Ym3jb39ahKjzRu17xrSkZbvZRGykTwKXXNe5j+"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.24.0.tgz_1495665569071_0.3180280518718064"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.24.1":{"name":"ipfs","version":"0.24.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"libp2p-ipfs-nodejs":"libp2p-ipfs-browser","./src/core/default-repo.js":"./src/core/default-repo-browser.js","./src/core/components/init-assets.js":false,"./test/utils/create-repo-node.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.0.0","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^1.2.2","eslint-plugin-react":"^7.0.1","execa":"^0.6.3","expose-loader":"^0.7.3","form-data":"^2.1.4","gulp":"^3.9.1","interface-ipfs-core":"~0.28.0","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.4.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.4.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.4.1","bl":"^1.2.1","boom":"^5.1.0","cids":"^0.5.0","debug":"^2.6.8","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.1.1","hapi-set-header":"^1.0.2","hoek":"^4.1.1","ipfs-api":"^14.0.2","ipfs-bitswap":"~0.13.1","ipfs-block":"~0.6.0","ipfs-block-service":"~0.9.1","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.13.1","ipfs-unixfs":"~0.1.11","ipfs-unixfs-engine":"~0.19.2","ipld-resolver":"~0.11.1","isstream":"^0.1.2","joi":"^10.5.1","libp2p-floodsub":"~0.9.4","libp2p-ipfs-browser":"~0.24.1","libp2p-ipfs-nodejs":"~0.25.2","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"^0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.4.0","peer-id":"~0.8.7","peer-info":"~0.9.2","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.0","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","safe-buffer":"^5.0.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.1.0","yargs":"8.0.1","readable-stream":"1.1.14"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"e7560f0023a1d80a531601abb06238856a0f3886","_id":"ipfs@0.24.1","_npmVersion":"5.0.0","_nodeVersion":"7.10.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-a34atrZGOUyN4900j9UDd7XZjo+6fBumzEgxAbm6ZKYCmfqowTj0vSJ/9KGP64XfxHSCr6zDmwQHkuboIxEOGw==","shasum":"c91a89d0e051691c6d18824e577d72f6ada74aaa","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.24.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBky0qoS0l+EpKub0qu71tqt0HC5epksvhSJ3t0oAL8BAiEA7BkZO8pewG+g+UT4kvH52bncyya9OqqlTFuoWFFOplU="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.24.1.tgz_1496051995770_0.4297193253878504"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.25.0":{"name":"ipfs","version":"0.25.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=4.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.1.0","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.1.0","execa":"^0.7.0","expose-loader":"^0.7.3","form-data":"^2.2.0","gulp":"^3.9.1","interface-ipfs-core":"~0.29.1","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.4.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.5.0","bl":"^1.2.1","boom":"^5.1.0","cids":"^0.5.1","debug":"^2.6.8","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.4.3","hapi-set-header":"^1.0.2","hoek":"^4.1.1","ipfs-api":"^14.0.4","ipfs-bitswap":"~0.14.0","ipfs-block":"~0.6.0","ipfs-block-service":"~0.10.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.15.0","ipfs-unixfs":"~0.1.12","ipfs-unixfs-engine":"~0.21.0","ipld-resolver":"~0.12.1","is-ipfs":"^0.3.0","isstream":"^0.1.2","joi":"^10.6.0","libp2p":"^0.10.1","libp2p-floodsub":"~0.10.0","libp2p-kad-dht":"^0.2.0","libp2p-mdns":"^0.7.1","libp2p-multiplex":"^0.4.4","libp2p-railing":"^0.5.2","libp2p-secio":"^0.6.8","libp2p-swarm":"^0.29.2","libp2p-tcp":"^0.10.1","libp2p-webrtc-star":"^0.11.0","libp2p-websockets":"^0.10.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"^0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"^0.4.0","peer-id":"^0.8.7","peer-info":"^0.9.3","promisify-es6":"^1.0.2","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.2.0","yargs":"8.0.2"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"8d67ba4302cbb6334d287c4d405c6243138e5960","_id":"ipfs@0.25.0","_shasum":"935fd2dde263caa5ede3aad30364aa994fa65d42","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"935fd2dde263caa5ede3aad30364aa994fa65d42","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.25.0.tgz","integrity":"sha512-7zZIC1/y2T2rMPAdawIHUHIUXPFHRpeTJsKWdujOjYmwoZC6WGSAqSNsETbKmOFt9AS0Yy8CNwWsqdB4wzy2jA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBdbyCG1r3LRHiTjndlgau5ePjb05+SaYYkVVtR9OOtrAiAjEtoRgWI/8pZb2GT/vfTR5KYUk3Nr48QRi3lGxTJyQQ=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.25.0.tgz_1499845938116_0.14094507531262934"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.25.1":{"name":"ipfs","version":"0.25.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.1.0","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.1.0","execa":"^0.7.0","expose-loader":"^0.7.3","form-data":"^2.2.0","gulp":"^3.9.1","interface-ipfs-core":"~0.30.1","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.4.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.5.0","bl":"^1.2.1","boom":"^5.2.0","cids":"^0.5.1","debug":"^2.6.8","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.5.0","hapi-set-header":"^1.0.2","hoek":"^4.2.0","ipfs-api":"^14.1.1","ipfs-bitswap":"~0.15.0","ipfs-block":"~0.6.0","ipfs-block-service":"~0.12.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.17.0","ipfs-unixfs":"~0.1.12","ipfs-unixfs-engine":"~0.22.0","ipld-resolver":"~0.13.0","is-ipfs":"^0.3.0","is-stream":"^1.1.0","joi":"^10.6.0","libp2p":"^0.11.0","libp2p-floodsub":"~0.11.0","libp2p-kad-dht":"^0.4.1","libp2p-mdns":"^0.8.0","libp2p-multiplex":"^0.4.4","libp2p-railing":"^0.6.1","libp2p-secio":"^0.7.1","libp2p-swarm":"^0.31.0","libp2p-tcp":"^0.10.2","libp2p-webrtc-star":"^0.12.0","libp2p-websockets":"^0.10.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"^0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"^0.5.0","peer-id":"^0.9.0","peer-info":"^0.10.0","promisify-es6":"^1.0.3","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.2.0","yargs":"8.0.2"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"59648921bc2fa90d245950a413061ac7a17f4cdb","_id":"ipfs@0.25.1","_shasum":"ba03a67c4252cb0903ce0738195b36bf227a604f","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.1","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"ba03a67c4252cb0903ce0738195b36bf227a604f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.25.1.tgz","integrity":"sha512-Sm58tPwap3yc+Rg+1iboILykh03ZfR5ZplnX4hiYdIX+v38q4geiKY2tq0Q9hgmV6p1vsqcn+5Ldnx0M6m3ajg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzhY2eZSh80AFeoVLE1xiAF0ReuzYZC/jx2ZoyuBHe7gIgNALu7qKAZyzNoeYz2lQBRFCWzKdmsKCcaXEYcooDj1k="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.25.1.tgz_1501098331297_0.9131298549473286"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.25.2":{"name":"ipfs","version":"0.25.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.1.1","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.2.1","execa":"^0.8.0","expose-loader":"^0.7.3","form-data":"^2.2.0","gulp":"^3.9.1","interface-ipfs-core":"~0.30.1","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.5.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.5.0","bl":"^1.2.1","boom":"^5.2.0","cids":"^0.5.1","debug":"^3.0.0","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.5.2","hapi-set-header":"^1.0.2","hoek":"^4.2.0","ipfs-api":"^14.1.2","ipfs-bitswap":"~0.16.1","ipfs-block":"~0.6.0","ipfs-block-service":"~0.12.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.17.0","ipfs-unixfs":"~0.1.12","ipfs-unixfs-engine":"~0.22.0","ipld-resolver":"~0.13.0","is-ipfs":"^0.3.0","is-stream":"^1.1.0","joi":"^10.6.0","libp2p":"^0.11.0","libp2p-floodsub":"~0.11.0","libp2p-kad-dht":"^0.4.1","libp2p-mdns":"^0.8.0","libp2p-multiplex":"^0.4.4","libp2p-railing":"^0.6.1","libp2p-secio":"^0.7.1","libp2p-swarm":"^0.31.0","libp2p-tcp":"^0.10.2","libp2p-webrtc-star":"^0.12.0","libp2p-websockets":"^0.10.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"^0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.5","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"^0.5.0","peer-id":"^0.9.0","peer-info":"^0.10.0","promisify-es6":"^1.0.3","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"^0.8.3","through2":"^2.0.3","update-notifier":"^2.2.0","yargs":"8.0.2"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"54be08b3bf18d9e6f71347d5b56521082610a8be","_id":"ipfs@0.25.2","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-RqiHeOOGBjZgSP2n/PYOPFHzNio6MvarZSP76LHT3hny62o63uSRIl1TccAraEZ+w/z9+Gp5xEuYP7LsxHzNRg==","shasum":"c4e70ccda6c3ec6a012cefe4652c8bef8b77d97e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.25.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1XJfoP0RElIfSqdlPHdSX4wwG02zX7feNZZrFFWCM3wIhAL6ZN41oUk2M4jx7dkZyJ0HiCKQYdKBX3YV+XcCElmqq"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.25.2.tgz_1503760136246_0.9967281096614897"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.25.3":{"name":"ipfs","version":"0.25.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.3.0","execa":"^0.8.0","expose-loader":"^0.7.3","form-data":"^2.3.1","gulp":"^3.9.1","interface-ipfs-core":"~0.31.12","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.5.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.5.0","bl":"^1.2.1","boom":"^5.2.0","cids":"~0.5.1","debug":"^3.0.1","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.5.2","hapi-set-header":"^1.0.2","hoek":"^4.2.0","ipfs-api":"^14.1.2","ipfs-bitswap":"~0.16.1","ipfs-block":"~0.6.0","ipfs-block-service":"~0.12.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.17.0","ipfs-unixfs":"~0.1.12","ipfs-unixfs-engine":"~0.22.0","ipld-resolver":"~0.13.0","is-ipfs":"^0.3.0","is-stream":"^1.1.0","joi":"^10.6.0","libp2p":"~0.11.0","libp2p-floodsub":"~0.11.0","libp2p-kad-dht":"~0.4.1","libp2p-mdns":"~0.8.0","libp2p-multiplex":"~0.4.4","libp2p-railing":"~0.6.1","libp2p-secio":"~0.7.1","libp2p-tcp":"~0.10.2","libp2p-webrtc-star":"~0.12.0","libp2p-websockets":"~0.10.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"~0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.8","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.0","peer-id":"~0.9.0","peer-info":"~0.10.0","promisify-es6":"^1.0.3","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.2.0","yargs":"8.0.2","prom-client":"^10.0.4","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.0.4","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"eafb0a1075a19b07292f2a6151e060435fc41087","_id":"ipfs@0.25.3","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-Vwk0QwJU6EcmSfuMJ4PtYlSoj8nLHBx6GPJyDyszRG8L/hE7s7zilkK1cPuQe7g3KPfHp0e3lJxYTrd4WSa+Kw==","shasum":"ae48e187936344d39b5245cb0640570ae8ffdcd3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.25.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUnSrgdh9vyyFJjs8lXohHJXwbW07Mm9ygjjeTzErXygIgWkTnZR0/Z83O+nDuqtYgc6aWjbyK7FaHxhwcDK9SHrg="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.25.3.tgz_1504271922405_0.7017689312342554"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.25.4":{"name":"ipfs","version":"0.25.4","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.3.0","execa":"^0.8.0","expose-loader":"^0.7.3","form-data":"^2.3.1","gulp":"^3.9.1","interface-ipfs-core":"~0.31.13","ipfsd-ctl":"~0.21.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.5.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.0","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.5.0","bl":"^1.2.1","boom":"^5.2.0","cids":"~0.5.1","debug":"^3.0.1","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.5.2","hapi-set-header":"^1.0.2","hoek":"^4.2.0","ipfs-api":"^14.1.2","ipfs-bitswap":"~0.16.1","ipfs-block":"~0.6.0","ipfs-block-service":"~0.12.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.17.0","ipfs-unixfs":"~0.1.12","ipfs-unixfs-engine":"~0.22.0","ipld-resolver":"~0.13.0","is-ipfs":"^0.3.0","is-stream":"^1.1.0","joi":"^10.6.0","libp2p":"~0.11.0","libp2p-floodsub":"~0.11.0","libp2p-kad-dht":"~0.4.1","libp2p-mdns":"~0.8.0","libp2p-multiplex":"~0.4.4","libp2p-railing":"~0.6.1","libp2p-secio":"~0.7.1","libp2p-tcp":"~0.10.2","libp2p-webrtc-star":"~0.12.0","libp2p-websockets":"~0.10.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^2.1.8","mkdirp":"~0.5.1","multiaddr":"^2.3.0","multihashes":"~0.4.8","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.0","peer-id":"~0.9.0","peer-info":"~0.10.0","promisify-es6":"^1.0.3","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.0","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.2.0","yargs":"8.0.2","prom-client":"^10.0.4","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.0.4","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"b3ad40fc1812304bb3906f948697f7f35ffe55c2","_id":"ipfs@0.25.4","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-xTXE9uhDp9Jrmo8KzXZ5LfQMohhhEBNzkqRai21bb25XCKR9WqImTxzH0zY73JwwkWYzPVfcPushYAfT22PsKg==","shasum":"a3d645ad64b936f90edc0cc392c657df6ba36e69","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.25.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDA2KVGl9sOjoi0aNaJM/tHIQ6gkQJ3dMnCtG1w4G/eaAiAlxQHU4dI+6IsI6+fuZFh4yL2eFcwS+AfZwNx8iyz7ig=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.25.4.tgz_1504294161248_0.37211567419581115"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.26.0":{"name":"ipfs","version":"0.26.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir-lint","coverage":"gulp coverage","test":"gulp test --dom","test:node":"npm run test:unit:node","test:browser":"npm run test:unit:browser","test:unit:node":"gulp test:node","test:unit:node:core":"TEST=core npm run test:unit:node","test:unit:node:http":"TEST=http npm run test:unit:node","test:unit:node:gateway":"TEST=gateway npm run test:unit:node","test:unit:node:cli":"TEST=cli npm run test:unit:node","test:unit:browser":"gulp test:browser","test:interop":"npm run test:interop:node","test:interop:node":"mocha -t 60000 test/interop/node.js","test:interop:browser":"mocha -t 60000 test/interop/browser.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","build":"gulp build","release":"gulp release","release-minor":"gulp release --type minor","release-major":"gulp release --type major","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^11.0.2","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.3.0","execa":"^0.8.0","expose-loader":"^0.7.3","form-data":"^2.3.1","gulp":"^3.9.1","interface-ipfs-core":"~0.31.19","ipfsd-ctl":"~0.23.0","left-pad":"^1.1.3","lodash":"^4.17.4","mocha":"^3.5.2","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.1","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.5.0","bl":"^1.2.1","boom":"^5.2.0","debug":"^3.0.1","cids":"^0.5.1","file-type":"^6.1.0","filesize":"^3.5.10","fsm-event":"^2.1.0","glob":"^7.1.2","hapi":"^16.5.2","hapi-set-header":"^1.0.2","hoek":"^4.2.0","ipfs-api":"^14.3.5","ipfs-bitswap":"~0.17.2","ipfs-block":"~0.6.0","ipfs-block-service":"~0.12.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.17.0","ipfs-unixfs":"~0.1.13","ipfs-unixfs-engine":"~0.22.5","ipld-resolver":"~0.13.2","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^10.6.0","libp2p":"~0.12.4","libp2p-floodsub":"~0.11.1","libp2p-kad-dht":"~0.5.1","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.0","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.0","libp2p-webrtc-star":"~0.13.2","libp2p-websockets":"~0.10.1","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.1","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.9","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.1","peer-id":"~0.10.1","peer-info":"~0.11.0","promisify-es6":"^1.0.3","pull-file":"^1.0.0","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^2.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.4","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.2.0","yargs":"8.0.2","prom-client":"^10.1.0","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.1.0","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"29752db2215158af93d168a20118f5d2b4604484","_id":"ipfs@0.26.0","_npmVersion":"5.4.1","_nodeVersion":"8.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-0FKFV7oyiIaZVE+PtuxB16Xg76jw+LCXEGWy+BF0QWSdyqqaXpfQvd2XSgAYLSctbOxlMKLJSOJV5Sb32X2QCw==","shasum":"54335ecdff0e35dedde3a48cd1a9f1c354dca42d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.26.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGtzEVEC8z7IS+3YTNthHJ/6GSkQZLIUYoLvKcsjQxvZAiEAhmm/4ZS+6AXl/8lr/8KOLvlgoEQiMBYc4TJiOZ7JCP0="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.26.0.tgz_1505291286330_0.9993558442220092"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.0":{"name":"ipfs","version":"0.27.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","test:unit:node":"aegir test -t node","test:unit:node:core":"aegir test -t node -f test/core/**.js","test:unit:node:http":"aegir test -t node -f test/http-api/index.js","test:unit:node:gateway":"aegir test -t node -f test/gateway/index.js","test:unit:node:cli":"aegir test -t node -f test/cli/index.js","test:unit:browser":"aegir test -t browser --no-cors","test:interop":"IPFS_TEST=interop aegir test -t node -f test/interop","test:interop:node":"IPFS_TEST=interop aegir test -t node -f test/interop/node.js","test:interop:browser":"IPFS_TEST=interop aegir test -t browser -f test/interop/browser.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.2.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.11","ipfsd-ctl":"~0.26.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.0","ipfs-bitswap":"~0.17.4","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.3","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.13.3","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.0","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.0","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.1","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-file":"^1.0.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"b3615b769beb38f81cd64c6f61b2542f3c952c64","_id":"ipfs@0.27.0","_npmVersion":"5.5.1","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-VsMbX8lX/WBOZ2ygt5fpJsNWzZaQOXwR+zQV95/hwoh9UvPN5s9H8cnB0/cElVMvasw7Hw6lyyfbO/Spm4/Bjg==","shasum":"d00a2da144944940b42313f99f21ef1f9c58214f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwiPq5SoCn0+mCHDrljtHJ2GtOLErMspA1v4FRacYZkAiEAyL5Gb5UbJdXwImEjREVCHXQdIUUPcXZWvBILQepUFTc="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.0.tgz_1512367670350_0.2899250683840364"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.1":{"name":"ipfs","version":"0.27.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","test:unit:node":"aegir test -t node","test:unit:node:core":"aegir test -t node -f test/core/**.js","test:unit:node:http":"aegir test -t node -f test/http-api/index.js","test:unit:node:gateway":"aegir test -t node -f test/gateway/index.js","test:unit:node:cli":"aegir test -t node -f test/cli/index.js","test:unit:browser":"aegir test -t browser --no-cors","test:interop":"IPFS_TEST=interop aegir test -t node -f test/interop","test:interop:node":"IPFS_TEST=interop aegir test -t node -f test/interop/node.js","test:interop:browser":"IPFS_TEST=interop aegir test -t browser -f test/interop/browser.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.2.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.12","ipfsd-ctl":"~0.26.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.4","ipfs-bitswap":"~0.17.4","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.4","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.13.3","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.0","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"a137002a9644ee5edf6fe9a313a805624fae2516","_id":"ipfs@0.27.1","_npmVersion":"5.5.1","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-sv82SR/0MJCyRgZ2VoHn1rKJbLTXKej1usRQjpg0sa78wVum+wzJm9QzaW5RaexFiGXJcE9w1tiopcAC1ysfJA==","shasum":"cf740b4f261745225cf61ebac59f906ac0fa3841","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCp1KJV6kaqcu4WEQ4kbMNLijg7c+xwuKhHOI6CUwjRPgIhAJeJ38OXNgVy6RgAFOTG/Y4C+wkDv/84063Hqi8cKUOh"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.1.tgz_1512681914333_0.815477357711643"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.2":{"name":"ipfs","version":"0.27.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","test:unit:node":"aegir test -t node","test:unit:node:core":"aegir test -t node -f test/core/**.js","test:unit:node:http":"aegir test -t node -f test/http-api/index.js","test:unit:node:gateway":"aegir test -t node -f test/gateway/index.js","test:unit:node:cli":"aegir test -t node -f test/cli/index.js","test:unit:browser":"aegir test -t browser --no-cors","test:interop":"IPFS_TEST=interop aegir test -t node -f test/interop","test:interop:node":"IPFS_TEST=interop aegir test -t node -f test/interop/node.js","test:interop:browser":"IPFS_TEST=interop aegir test -t browser -f test/interop/browser.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.2.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.12","ipfsd-ctl":"~0.26.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.4","ipfs-bitswap":"~0.17.4","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.4","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.13.3","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.0","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"5d61d93cc265aeecb70926b5912b7c0637a647e4","_id":"ipfs@0.27.2","_npmVersion":"5.5.1","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-Og1VvEr33kec4AYWqoZUR/b/urfKCK3zF0jGgQj9XJEcISCSJo8Lu6wXKZZAU4HVHQYAitvEpBMoBiWarTUEIg==","shasum":"8f7562c07a19563c0b99d9acb938029c1a85aee5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs2fnIdXCpMG7S9MhkBPwqWfhYVYXC5bcWv76pqmjCCgIhAOZar6ACSiWW7X/VVvcWE3kIfKYAwG3JK//TFbF1Vjav"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.2.tgz_1512853630259_0.8797060798387975"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.3":{"name":"ipfs","version":"0.27.3","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","test:unit:node":"aegir test -t node","test:unit:node:core":"aegir test -t node -f test/core/**.js","test:unit:node:http":"aegir test -t node -f test/http-api/index.js","test:unit:node:gateway":"aegir test -t node -f test/gateway/index.js","test:unit:node:cli":"aegir test -t node -f test/cli/index.js","test:unit:browser":"aegir test -t browser --no-cors","test:interop":"IPFS_TEST=interop aegir test -t node -f test/interop","test:interop:node":"IPFS_TEST=interop aegir test -t node -f test/interop/node.js","test:interop:browser":"IPFS_TEST=interop aegir test -t browser -f test/interop/browser.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.2.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.12","ipfsd-ctl":"~0.26.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.4","ipfs-bitswap":"~0.17.4","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.4","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.13.3","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.0","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"6a7027d2c0479a7b0d566804a86f16962710d3bf","_id":"ipfs@0.27.3","_npmVersion":"5.5.1","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-pUvmBE/Vo5vGPuChJchl/1AQBldjmtJU7iddtbR9iLz8f1qdtz2y7p9HyHsPM8N7t+VjB1Y+B2JchUap4wPdUg==","shasum":"c65e32786feadfdad175fe6f25b9685f479e770a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC97Rh68/jKDyLgvwH9Yc52u2LRvYNriQXy538Ppyk+IwIgFPAfolV+BRjw67vDKhKtu+SdrPAGUpJY9F9M617jvQs="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.3.tgz_1512902022897_0.0025258781388401985"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.4":{"name":"ipfs","version":"0.27.4","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","test:unit:node":"aegir test -t node","test:unit:node:core":"aegir test -t node -f test/core/**.js","test:unit:node:http":"aegir test -t node -f test/http-api/index.js","test:unit:node:gateway":"aegir test -t node -f test/gateway/index.js","test:unit:node:cli":"aegir test -t node -f test/cli/index.js","test:unit:browser":"aegir test -t browser --no-cors","test:interop":"IPFS_TEST=interop aegir test -t node -f test/interop","test:interop:node":"IPFS_TEST=interop aegir test -t node -f test/interop/node.js","test:interop:browser":"IPFS_TEST=interop aegir test -t browser -f test/interop/browser.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.2.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.15","ipfsd-ctl":"~0.26.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.4","ipfs-bitswap":"~0.17.4","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.4","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.13.3","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.0","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"3daca93b041f64d2861565274a5f9d4ef509f8e7","_id":"ipfs@0.27.4","_npmVersion":"5.6.0","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-plniPkzXOKynuD/1VkplfsIfixUQCy9GzYThEdF+Ed6SH7bAIG+tc9XPH2kuK90X9O4NqPPXPR0TdcIt6gqaFw==","shasum":"cd9ac5426d62d8e6589a2c64e7c1ed18445d9332","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDboL5ALZDhBohK1reIeNTnCQ55OSSYKyj5UyKTBoryqQIge6HW9M7PxAMPl3raA6uslusT58YMBe4nfhcUv3cnoGA="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.4.tgz_1513185499536_0.6993432091549039"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.5":{"name":"ipfs","version":"0.27.5","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","test:unit:node":"aegir test -t node","test:unit:node:core":"aegir test -t node -f test/core/**.js","test:unit:node:http":"aegir test -t node -f test/http-api/index.js","test:unit:node:gateway":"aegir test -t node -f test/gateway/index.js","test:unit:node:cli":"aegir test -t node -f test/cli/index.js","test:unit:browser":"aegir test -t browser --no-cors","test:interop":"IPFS_TEST=interop aegir test -t node -f test/interop","test:interop:node":"IPFS_TEST=interop aegir test -t node -f test/interop/node.js","test:interop:browser":"IPFS_TEST=interop aegir test -t browser -f test/interop/browser.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:benchmark":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","test:benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.2.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.15","ipfsd-ctl":"~0.26.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.4","ipfs-bitswap":"~0.18.0","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.4","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.14.0","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.1","libp2p-railing":"~0.7.1","libp2p-secio":"~0.8.1","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"1914da50cf29dd4acb98d1a7c2838f92abf62381","_id":"ipfs@0.27.5","_npmVersion":"5.6.0","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-msXTU+vgXArtC9PVEvOIv9auSfNRpGwFFgcoTB0ZLkmGDkG0LuUieRHMuibjYySqVE5rP0upUdqPeBXzOx40NA==","shasum":"0357074ab17c27d24983f320f506d80de7fcd3b0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4+p4TNMFYmyLT0HiNoyEjILveK+qCQX9M87SvRcUhigIgH38e/KxQ3h4bdfskD8Q5odVT8p+2y6XgzPoPpRF2aQk="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.5.tgz_1513584257448_0.6538266185671091"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.6":{"name":"ipfs","version":"0.27.6","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.3.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.8.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.36.15","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"^0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.0","glob":"^7.1.2","hapi":"^16.2.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.2.4","ipfs-bitswap":"~0.18.0","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.4","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.1","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.0.2","libp2p":"~0.15.0","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.1","libp2p-railing":"~0.7.1","libp2p-secio":"~0.9.0","libp2p-tcp":"~0.11.1","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.1","multihashes":"~0.4.12","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.3","peer-info":"~0.11.3","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.1","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.0.3","yargs-parser":"^8.0.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"624cb47d1c3becca1001f79c7e8fdc8bfcd43480","_id":"ipfs@0.27.6","_npmVersion":"5.6.0","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-3xWPJcnxgKJl020eDfMv7l3uXBDzPSpxF2dmyOmg/qLReNFc3ByiBOi9xQkTHTx9wiVT6V3js8M13sDzYDXdtg==","shasum":"373975cac23bd19bc4c7fb12b5e091365dab8b79","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuiJX+yxZQ+cQtKuUZssmYkWn0EDhkcT6LwOnZN67KCgIhAJoccSKq/JwgqfPCycRMpz/AS71N0fCbFpft/Bl4Ssy6"}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.6.tgz_1515349821478_0.42409906070679426"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.27.7":{"name":"ipfs","version":"0.27.7","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^12.3.0","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.5.1","execa":"^0.9.0","expose-loader":"^0.7.4","form-data":"^2.3.1","hat":"0.0.3","interface-ipfs-core":"~0.40.0","left-pad":"^1.2.0","lodash":"^4.17.4","mocha":"^4.1.0","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.2","debug":"^3.1.0","file-type":"^7.4.0","filesize":"^3.5.11","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.2","ipfs-api":"^17.3.0","ipfs-bitswap":"~0.18.0","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.5","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.2","ipld-resolver":"~0.14.1","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.1.0","libp2p":"~0.15.0","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.13.1","libp2p-kad-dht":"~0.6.0","libp2p-mdns":"~0.9.1","libp2p-multiplex":"~0.5.1","libp2p-railing":"~0.7.1","libp2p-secio":"~0.9.0","libp2p-tcp":"~0.11.2","libp2p-webrtc-star":"~0.13.3","libp2p-websocket-star":"~0.7.2","libp2p-websockets":"~0.10.4","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^3.0.2","mime-types":"^2.1.17","mkdirp":"~0.5.1","multiaddr":"^3.0.2","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.2","peer-id":"~0.10.4","peer-info":"~0.11.4","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.1.2","pull-sort":"^1.0.1","pull-stream":"^3.6.1","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.3","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^10.1.1","yargs-parser":"^8.1.0","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"d798d597b558f46af8df8d571cf589bb93d36897","_id":"ipfs@0.27.7","_npmVersion":"5.6.0","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-81yncgsZW6nUVmZ+z4UgLwfUHSwNWbYlYdR4jdrgSYkUlqMNTplmDp5aHANjYX3lGa0zKqmlugV8oOVDdVXVLA==","shasum":"c73ab18888fce2b99437c97bcb656f9d22f95b33","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.27.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFsboV2dvVEb5JfuLcAtearwhpeEMqIBIrJurpV3lYVkAiA8UYCjR/goNb1Xa6W4klHQpQojpBVXWyiPoFCCT9hKnA=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs-0.27.7.tgz_1516114818567_0.6770735823083669"},"directories":{},"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.28.0":{"name":"ipfs","version":"0.28.0","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.0.5","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"^0.9.0","expose-loader":"^0.7.4","form-data":"^2.3.2","go-ipfs-dep":"^0.4.13","hat":"0.0.3","interface-ipfs-core":"~0.52.0","ipfsd-ctl":"~0.29.1","left-pad":"^1.2.0","lodash":"^4.17.5","mocha":"^5.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.2","debug":"^3.1.0","file-type":"^7.6.0","filesize":"^3.6.0","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^18.1.1","ipfs-bitswap":"~0.19.0","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.7","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.4","ipld":"^0.15.0","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.1.2","libp2p":"~0.18.0","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.14.1","libp2p-kad-dht":"~0.8.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.9.2","libp2p-multiplex":"~0.5.1","libp2p-railing":"~0.7.1","libp2p-secio":"~0.9.3","libp2p-tcp":"~0.11.6","libp2p-webrtc-star":"~0.13.4","libp2p-websocket-star":"~0.7.7","libp2p-websockets":"~0.10.5","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^4.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^3.0.2","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.4","peer-id":"~0.10.6","peer-info":"~0.11.6","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.2","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.4","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^11.0.0","yargs-parser":"^9.0.2","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"a9b4d2186e2eb5ade3540a31175ba63ea8729327","_id":"ipfs@0.28.0","_npmVersion":"5.6.0","_nodeVersion":"9.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-GVS/66Vu5tae3Gy4ovOsjPfQhNfwVBFPyjXVD3xN7UJD8txVNq5iHWSz4yqSjrJOCihh2ikowci6H9Uf86J5vg==","shasum":"bc9083f59fc0fe01f8e3497cfdf2f6d1acc3938d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.28.0.tgz","fileCount":279,"unpackedSize":16924807,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDPq+S1pqF2HoZ+7/ja/7dRjkoU9njaSgIsOcHaHTUCxAiA3SeeKXiHH4P6idFhdz/iHMhHadwuZ9k3wyCgsePd17w=="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.28.0_1519916407590_0.24352157820782971"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.28.1":{"name":"ipfs","version":"0.28.1","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.0.5","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"^0.9.0","expose-loader":"^0.7.4","form-data":"^2.3.2","go-ipfs-dep":"^0.4.13","hat":"0.0.3","interface-ipfs-core":"~0.52.0","ipfsd-ctl":"~0.29.1","left-pad":"^1.2.0","lodash":"^4.17.5","mocha":"^5.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.2","debug":"^3.1.0","file-type":"^7.6.0","filesize":"^3.6.0","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^18.1.2","ipfs-bitswap":"~0.19.0","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.7","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.4","ipld":"^0.15.0","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.1.2","libp2p":"~0.18.0","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.14.1","libp2p-kad-dht":"~0.8.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.9.2","libp2p-multiplex":"~0.5.1","libp2p-railing":"~0.7.1","libp2p-secio":"~0.9.3","libp2p-tcp":"~0.11.6","libp2p-webrtc-star":"~0.13.4","libp2p-websocket-star":"~0.7.7","libp2p-websockets":"~0.10.5","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^4.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^3.0.2","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.4","peer-id":"~0.10.6","peer-info":"~0.11.6","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.2","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.4","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^11.0.0","yargs-parser":"^9.0.2","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"}],"gitHead":"910570095e44cbc0af65c38a87f8cbd6f3fdbf11","_id":"ipfs@0.28.1","_npmVersion":"5.6.0","_nodeVersion":"9.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-2ObjAXHX4zJX/WehPIvdDGZfDV55AZ+P1QgWH8k/nYBEVIK1hNIz3Gq5dUBJIfOOF9EEs4WIEPMh2xCya6inKQ==","shasum":"a13018087e90f98cf496d84ceed2f6095236e3dc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.28.1.tgz","fileCount":279,"unpackedSize":17010986,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKMbpjcb3ZHcpJAdm9oofQtho3DmNZPFpfCohqZQDu/gIga3lXzQA8oaHQkPDMFMc6tdtS1bOQ2fKeMd2e6HryPhg="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.28.1_1520594343557_0.4454396101284568"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.28.2":{"name":"ipfs","version":"0.28.2","description":"JavaScript implementation of the IPFS specification","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.json":"./src/core/runtime/config-browser.json","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"author":{"name":"David Dias","email":"daviddias@ipfs.io"},"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.0.5","buffer-loader":"0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"^0.9.0","expose-loader":"^0.7.4","form-data":"^2.3.2","go-ipfs-dep":"^0.4.13","hat":"0.0.3","interface-ipfs-core":"~0.52.0","ipfsd-ctl":"~0.29.1","left-pad":"^1.2.0","lodash":"^4.17.5","mocha":"^5.0.1","ncp":"^2.0.0","nexpect":"^0.5.0","pre-commit":"^1.2.2","pretty-bytes":"^4.0.2","qs":"^6.5.1","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"^0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.1","boom":"^7.1.1","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.2","debug":"^3.1.0","file-type":"^7.6.0","filesize":"^3.6.0","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^18.1.2","ipfs-bitswap":"~0.19.0","ipfs-block":"~0.6.1","ipfs-block-service":"~0.13.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.18.7","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.24.4","ipld":"^0.15.0","is-ipfs":"^0.3.2","is-stream":"^1.1.0","joi":"^13.1.2","joi-browser":"^13.0.1","joi-multiaddr":"^1.0.1","libp2p":"~0.18.0","libp2p-circuit":"~0.1.4","libp2p-floodsub":"~0.14.1","libp2p-kad-dht":"~0.8.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.9.2","libp2p-multiplex":"~0.5.1","libp2p-railing":"~0.7.1","libp2p-secio":"~0.9.3","libp2p-tcp":"~0.11.6","libp2p-webrtc-star":"~0.13.4","libp2p-websocket-star":"~0.7.7","libp2p-websockets":"~0.10.5","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^4.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^3.0.2","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.5.4","peer-id":"~0.10.6","peer-info":"~0.11.6","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"^0.2.2","pull-file":"^1.1.0","pull-ndjson":"^0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.2","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.4","safe-buffer":"^5.1.1","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.5.5","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.3.0","yargs":"^11.0.0","yargs-parser":"^9.0.2","prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"optionalDependencies":{"prom-client":"^10.2.2","prometheus-gc-stats":"^0.5.0"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"}],"gitHead":"f7cf10b34296e8e6716c10b88ba573e3379a358f","_id":"ipfs@0.28.2","_npmVersion":"5.7.1","_nodeVersion":"9.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"integrity":"sha512-ryNxKhNQvU33M3tvRwk/pVG63ZLiS1R5a2zbrqAS75DSrO3N/sRd/iCr8THr4EPIdnYfGEEWluqig6n6rBzl4A==","shasum":"1e9806354fdeecd773ffa612c28953c9a1ac64a0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.28.2.tgz","fileCount":280,"unpackedSize":18128579,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvzYbxT/GhKlVTPDOxKSLCcRcNocQGY5hIuwmZ5P0y6QIgNOofkMtewzw7dW6a9nD7U6I4GArgPvbxmVG190q+b4U="}]},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.28.2_1521036114943_0.39013346469175847"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.29.0":{"name":"ipfs","version":"0.29.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.66.2","ipfsd-ctl":"~0.37.0","lodash":"^4.17.10","mocha":"^5.1.1","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^4.0.2","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^7.7.1","filesize":"^3.6.1","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^22.0.0","ipfs-bitswap":"~0.20.0","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.20.0","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.29.0","ipld":"~0.17.0","ipld-dag-cbor":"~0.12.0","ipld-dag-pb":"~0.14.4","is-ipfs":"~0.3.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.2.0","joi-browser":"^13.0.1","joi-multiaddr":"^2.0.0","libp2p":"~0.20.4","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.11.0","libp2p-mplex":"~0.7.0","libp2p-railing":"~0.8.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.0","libp2p-websocket-star":"~0.8.0","libp2p-websockets":"~0.12.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^6.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.10.7","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.7","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.0","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^11.0.0","yargs-parser":"^10.0.0","prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"0fc3a7f8d8317ea6a60cdc93a7023eb9de511e83","_id":"ipfs@0.29.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.1","_npmUser":{"name":"daviddias","email":"mail@daviddias.me"},"dist":{"integrity":"sha512-1WlavPDx23iowF5RTHbyHsEqYgjDqn9ydnGMnVt7zHmdCV7+liQiVixlo0TV+ML/e2lb9VFsz17FS2L0ioqxMg==","shasum":"319840f46d387bf661698f0e9bd490b1908c2996","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.29.0.tgz","fileCount":310,"unpackedSize":21519823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDT65CRA9TVsSAnZWagAANgkQAIwX4uccbkJoiC+Z2n+d\nFPHtYH1T8SzfGcWvdsBilZzmhqU0YNgfMXEBJOUWL6tvRKXt2C8O+FGmJGPV\n3hUZ8/G2zQucPlY3+sYcL3m2qcp5JfqvDMndLZBq7wqydWRJ9I8BCWvguPHT\nURe87qXHJjE5C6J24h8VWgdpzDoI07g3UCtZSXRpo4wIjPAAREtZPU37UXMV\nUBFUtWy3wSc6JoyGXz8m7CLojV5Ck6VeS5b7cGaqDYIugPlrt14S8zI1AZem\nko64rY1XW4MioQsOOdrGKz7bTM8206YV5wynnl9dk2aABJ4I3BqMwQqvArs4\nP69bWpJ/ZUOAmHYVfdJztlfOnnXafjWf6FhgoS0rJa0gpFG3mZBX4yR2lmkX\n557uJCXJb1b1AXxkvf9Ev11jxuDYugx6k4aAfJXw4q7z2aN/+0GsBdcVMbOS\n6VRBOTU4kaMFW17Wllg7IxK6J051ZMxfWpIffJ1QPcUZ67t7i4Xkow9Xjhcu\ncLPCwO8CdSjW4EqVu0AqtW79XCOvkKy1RU86EuF/8fMnvaH4WB4+blZRVKSW\nhgl0INzZBmSNE+04shpZ/3NbDWWyLDOGAePeMzGbyiw/YbcOGR336S1HXNDo\nBwitxx00gJU8tkB9paal3ApOLNG9OLC6CB5guP1JFxV/ISsF5hrTZkmng0Yb\nuJta\r\n=00l3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEF4k8r24v2ZfnsddaQfaKjjjL6ghZTBSfvkZ0zzOh0hAiEAmHuxrbIoW6qH3D73k/nLvwQEdiipqecjV2LJ8eDNYic="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.29.0_1527594677944_0.2605156280558627"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.29.1":{"name":"ipfs","version":"0.29.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.66.2","ipfsd-ctl":"~0.37.0","lodash":"^4.17.10","mocha":"^5.1.1","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^4.0.2","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^7.7.1","filesize":"^3.6.1","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^22.0.0","ipfs-bitswap":"~0.20.0","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.29.0","ipld":"~0.17.1","ipld-dag-cbor":"~0.12.0","ipld-dag-pb":"~0.14.4","is-ipfs":"~0.3.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.2.0","joi-browser":"^13.0.1","joi-multiaddr":"^2.0.0","libp2p":"~0.20.4","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.11.0","libp2p-mplex":"~0.7.0","libp2p-railing":"~0.8.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.0","libp2p-websocket-star":"~0.8.0","libp2p-websockets":"~0.12.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^6.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.10.7","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.7","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.0","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^11.0.0","yargs-parser":"^10.0.0","prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"ef88831b47615c03d8341cf73ed77b20202ad573","_id":"ipfs@0.29.1","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-2TMT5pr4WO+E41jwF3QoqICN0gr2CQ5z/BNUcuXDkuwdIrsFlb+OJMuDQjZqe35LmDdS98UjFF1WO1tBuX3ldA==","shasum":"e8fc8d67e300097b943019a783b8d38fec4d3900","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.29.1.tgz","fileCount":313,"unpackedSize":28584792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDnCACRA9TVsSAnZWagAAad0P/AkNO93MF5bv6mwJ1ojT\nJ9YIjbGNxONRVpDiCkMIr+rTWtNESgzz53AY8QFiORmMthkmb9MlIFF0uRXx\n7u9f6ACfsxWizhgVco9MYSyR7jwY6KAmAAW4Z7oEHj07b/3geIAXJtCMGzTq\nHIEiC00bLjoHHEbuJ9PAn570bjDlc/OY7rPLnDT/X3A6DJGMIWkzkKpfS9Yz\nytqFIjAX/jYMAKvZos9bcRRcN+muGbbYb881BFndwk0pgd/KtKMNl0Zfa8bi\nvNBg27aA4fXRbKq9YuYJaZe5663J4SlxwxVhRJSAoSiMqLnHao5xpobUl3Kx\nfBlNTch8M/WY4wHqSbznsbVv34daRrTIm5/I9b1DU2P8cdbtQc0b4ZQcneUw\n/6lx1R4nK5tq3B4+yAQdjk6/rx6woNg/yZKbdWb+l8zr0VtZc4dsp2oO7tMK\n/5pEvBwefhYx2sp2xfZrwW7R7pXdLkHt4d4UmnPUSuOom+BkQOJoEYfzahua\ntOYaW0AisWqgMA02kTgzabRwfOEMIemNtl/+1pVdRaprnoI8BtabDGMfG9sw\nKNwOW3RTgA6ZVRQ9RCzIZHngukaEAIc/zq5jxJbzqEBcMgaAby1EijuNZivZ\nLFPym/jTf9FqIyrS0U9BoaRsbZHfYa61vEqTuLdLBTTjLYU9PZxe3eSZb4+Y\nOeMg\r\n=MNZw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCftYLnQ4LH4ARwcW8SQBTFb93fMcoWHaOq/8E107RJTAIgbXh+AjqG8SgwRVWN5VC7pNXDx9qjbAPvaXegQpkrYl4="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.29.1_1527672957990_0.6147655361084035"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.29.2":{"name":"ipfs","version":"0.29.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.66.2","ipfsd-ctl":"~0.37.0","lodash":"^4.17.10","mocha":"^5.1.1","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^4.0.2","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^7.7.1","filesize":"^3.6.1","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^22.0.0","ipfs-bitswap":"~0.20.0","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.29.0","ipld":"~0.17.1","ipld-dag-cbor":"~0.12.0","ipld-dag-pb":"~0.14.4","is-ipfs":"~0.3.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.2.0","joi-browser":"^13.0.1","joi-multiaddr":"^2.0.0","libp2p":"~0.20.4","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.11.0","libp2p-mplex":"~0.7.0","libp2p-railing":"~0.8.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.0","libp2p-websocket-star":"~0.8.0","libp2p-websockets":"~0.12.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^6.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.10.7","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.7","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.0","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^11.0.0","yargs-parser":"^10.0.0","prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"aec6f680d8b5305cca26ff3c551fde8f86edd65d","_id":"ipfs@0.29.2","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-i0FQfE7I0r284gkfFk/IKErnhu/hYwaaKweOxOr1i2N1hBTRXDKiOTasomW4d2Fh5PSNFUqYMrCqFSUGa1l6gA==","shasum":"d8d4614d78903494f0483aa3ad1b64013795d31e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.29.2.tgz","fileCount":313,"unpackedSize":28604378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEW0WCRA9TVsSAnZWagAAfKMP/1Gxy6Qg6I/qmm0a6WH1\nm8OMtSKXbAfs9dFUNkHZvD6Ny7aOvSqLZ/ja8ctkYBG2JLfKy+FpgiaqBTE8\nlPiaWHB5P1pB7X5W3cwm5H1B2AxNwnQAS5wftnwPWlBWMYlgrdzDpcTDdqZ/\npB7FaoRejTEighjopxXQzms2OAW1QITb7M2CtAVs/3JMcktzq8PUVlTv1xnQ\n/VTRlSGphFtqfEP7fQBBVd/3TL9Hp9QRIY3yAXZv+qZ1YeXlSS3X8gmavJL6\n3rJKKmRWktE08GZxpWVyWMyaALlD8t4Av5qnLh/BcDilQ/LBSmINaaQhBBlc\nZnJ7DQ0KD1vhU1BGuC2me4QRz1sg01PKAtKCLazxlxQkCQ8yy+DOuIvvv+EH\n+XIuCm57eh799GoNq0lz4/uQofgENfYsbwLAPCFnLn2EJlMDnm+aHxYthszX\nQaKKldrJxpNLBrfWkNfBx9XbOmTUjQz4ntgaJNmg4EYsZMf3dKxw0Ji+6DGg\ntkKwV6+8xCUE15dq19wZlxo2CXsN5GGbtuzv3id55RU5XawWCORBKiHe6Wh0\nq5yRRSPmPERZO2QeRJF6FiZXx8DKuTdHBtyGd9t20wGFGqlBhTo1F3pptyMd\nqGA+NRAy3S1M2z9jrs9rl/JQjDtqGOYLokvohgwkRZE1UrVsfDbo3hkT44tW\nXG+k\r\n=yBzQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDodpLSXzwDeJYSZQ8Kx/daDpuvnCd8iNRrSsorH4pCSAiEAjrPl54z/AMiK0zINIU4pv3mSfJXGzs6U+VwoZkD/9O4="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.29.2_1527868690703_0.3868740189351578"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.29.3":{"name":"ipfs","version":"0.29.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^13.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^2.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.7.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.66.2","ipfsd-ctl":"~0.37.3","lodash":"^4.17.10","mocha":"^5.1.1","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^4.0.2","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"async":"^2.6.0","big.js":"^5.0.3","binary-querystring":"~0.1.2","bl":"^1.2.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^7.7.1","filesize":"^3.6.1","fsm-event":"^2.1.0","get-folder-size":"^1.0.1","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","ipfs-api":"^22.0.0","ipfs-bitswap":"~0.20.0","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.14","ipfs-unixfs-engine":"~0.29.0","ipld":"~0.17.1","ipld-dag-cbor":"~0.12.0","ipld-dag-pb":"~0.14.4","is-ipfs":"~0.3.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.2.0","joi-browser":"^13.0.1","joi-multiaddr":"^2.0.0","libp2p":"~0.20.4","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.11.0","libp2p-mplex":"~0.7.0","libp2p-railing":"~0.8.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.0","libp2p-websocket-star":"~0.8.0","libp2p-websockets":"~0.12.0","lodash.flatmap":"^4.5.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.sortby":"^4.7.0","lodash.values":"^4.3.0","mafmt":"^6.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.10.7","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.7","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^3.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.0","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^11.0.0","yargs-parser":"^10.0.0","prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.0.0","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"38cb1b88f2764844ebad72b62e33353acca66323","_id":"ipfs@0.29.3","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-czJQOb+jlmmujyqq4C4CxkwKLJeElp6MwXJfpanXUTyG31X823uGAOe+dRS6L/ouiojLhDxMb9TUj0era6ukIQ==","shasum":"60b4fa56992861e758d752d79895b932de7fd954","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.29.3.tgz","fileCount":313,"unpackedSize":28605609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFQkICRA9TVsSAnZWagAAxF8P/2c+AhvvV/us+OK91uc2\n9oF1y7hSgSGIyF+xPtNFRXudQdmXqzYdmAcWqaoM7yqAXj3ngGY+TCmEELSQ\n9x/D9d75BYKAzt+vXkrnrGALimohHKSVoUCyW0Nv60Qe79DXmaInIpzmajJH\nBvvIyzl+af8FMLiZETK3Qx7ghOAkLfJkzEuyY2ZcaPR7D0FyXq2tNscSa2YD\nRaCF5SzKh7eZAREl3Zw/RUGJ4Ix2BwXPJHQvuNCeH6iVcOLOB/AUu9/BtihF\nCU2tYpT90oKc31UHZYjEPbE4+AxkIFvTCBzEaUX0k8iGeY7r0qgrgBYoqNR4\nyLGeu/cOs2La03j89fNh88qF/InhVv7w55XZ3b2tq/bJaCOwj/5IjFTC2RSY\nbB4S3vJGh9tm11V0D5Uik5Udwtuj+APe3TQOjwIDGBh0HjEuZv2z2yMIJ3QN\n7xZR68qCS0WOcuN19SLvhK6piLFANXKInCAxpiwpW1jpzZTN87ygDgRMuJ5K\nq+8nHSvqOpim5r9j7193NkY3ioILus+QmNDvPvY7mFtmpuJByQHejXwEnSzd\nYsrQTuFHsnFUfSP8jNb4/A9407hwHqFOP5/CX1LOSHtnT7x4Ww45/auT+sdz\nRVD0KFem+gjQ2nUXqzRZ0x6ny7Sg7rKnisn4LDUxbOgLAx9aV7rr2bQ5SyC8\nNagG\r\n=L6Yb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICxzVR9moTkncJcNdi9U7NVHUONEDv4n93UEOkqlze3+AiBU7xcSx7xXCBN6m6eWE14+obPT7+6diw6dbQkovx+JUw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.29.3_1528105221259_0.048036130897067375"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.30.0":{"name":"ipfs","version":"0.30.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^14.0.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.71.0","ipfsd-ctl":"~0.37.5","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.0.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.1","ipfs-bitswap":"~0.20.2","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.0.14","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.30.0","ipld":"~0.17.2","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.5","is-ipfs":"~0.3.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.22.0","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-bootstrap":"~0.9.3","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"539323c590694b1f0680ec406c4cd33155e90d62","_id":"ipfs@0.30.0","_npmVersion":"6.1.0","_nodeVersion":"10.5.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-31Rz0m+tSyn5QX5NOU6Aw41tX7MA10ao8YdnOiJ9MkzpT5EfZ0Vulc7FAc9dyVXOZK22qAkblp1zAIyaOnVmYw==","shasum":"6139e5798c74ba9b5e117bcacc2745a2d9a54519","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.30.0.tgz","fileCount":316,"unpackedSize":31358666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ4uRCRA9TVsSAnZWagAAjikP/RWe8o4J0Ozz1G2No3eN\ne8AQ7xLL099fJspIxjOhS9MXgke49E61GPxZYvpR6PSaPBtYiwxIaumRHfLc\nds+qmDCPG3vL3dyf13LUSAztGGPT+KOPcJLyir4hQWYjVQi9Q7D45CqXxlx0\ncc1oOrSArfo+PTFzDKHEkt9IQ4wUmp6dxvxJoUkW0igCMNvu0KDVOC8/rjJb\n7uaca9gr2EnZkTxrE7T+p5u4rsPPc3UwJ6X97r37tFYwOGan15Lu3dYjWwG3\nWwqEroSMvJGYCsyQUzdagP+j/GvifWtbWyg7BZXqqQOnf1saYL732RYKxXvb\nQQ2ODfqQJjsoNTvr8+a4/aKcI5EIMmq4kjpDExHtlR4YUaV2MU5it/93ofC5\n0i5mfNxIHjRj0zHIJ9DMSsOpf9rRQuCXOzqzWU3aVDZOPvmlb9HLAaQAPPvu\nFsAAN2A5IqF35vgmtOlsGEZDS4MhbdrazJjkAe81zdB/9TECaNppNHy6BeU8\n3A1kIKuVxrHLCVmgcq1c1GYMMMVtcfAKdjjfTDQPm1UK01hxWSYj/iI9ACcw\nxIpY4Jcp6pq6JGTpjRIX929x5glCGkQZNmIxbzUC0/LfS2ZBZOEbyjiBuL6X\nAQnZBxO3h5VFfQGgKRoxXvt5HN4Vp0nga46blVNFnPNpUldy1PrxQY+EOpZc\noUuq\r\n=PGU0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICcUMcb3cT6RTtXOu+H/n0SW1922dRbebThVc4SjACnbAiEA9TuSUA2oqvw7yLlAnmFbIokV/EC8NJHzil8fQ6ePANs="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.30.0_1531153296706_0.09386263385250815"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.30.1":{"name":"ipfs","version":"0.30.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.0.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.72.0","ipfsd-ctl":"~0.37.5","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.0.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.1","ipfs-bitswap":"~0.20.2","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.1.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.30.0","ipld":"~0.17.2","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.5","is-ipfs":"~0.3.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.22.0","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.0","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-bootstrap":"~0.9.3","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.18","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"86d46f4bfdedab5029f18e436ac5243844bcfc4d","_id":"ipfs@0.30.1","_npmVersion":"6.1.0","_nodeVersion":"10.5.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-Vks8ADqtuRR9lMDr7hS7qpA2C6TiJDwwsK7m9Bih0nvy+ZWlnvDWajJD9h+zUtkIJZT2PldcT5/6rZhQKd5TcQ==","shasum":"67903586300730e6884d8c716248f91e70287f61","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.30.1.tgz","fileCount":333,"unpackedSize":68609534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTfWICRA9TVsSAnZWagAAVi8P/3Pn21VkFMi0GyLVgYA1\n7QT8UHO/nwKmMM5atoqcU2U5CwhwQ9O5zCsKsTZEdUma5+BH7poLWBvrXKN8\nDkT1SxtqseTMbczCnLYj6YOnaTyavK3879TQYMmlV5gAfJsOckrkQjYlPLOO\nLGTKZis5B7ITpFL+D8k+Y/+LrxVjKsPoECdz/QHJG1g7n2tJaXk62hK0LQle\nRhpzO/LNXDqDwuVAzJ0mTLNnvuBvaEGie2FgXngScrq5FP0crfKRsCzAgqkG\nFr2rToYP/oYBEjUpCDB8arWF/EB5ACXGbKJswAbIFzbFDqDlFYIm9Q9pzGt5\nUPhyV3gfWRifbHp80/BLxaq8mVMYacMYB4sgT+EVMGRgsbXsGjGqX6FxOQ5Q\noRIo2qTpPfHf95PChBSRN3pF28MxGfA9vXA0xz8t7Jcf/aaa0MuN9ju5rby8\ncaCgAcOaAA09GSnI0GAGrP91LiHelwEUFpBOxxHRIxNLAy0rMj5LbQWtjE7l\nal4gCgrLCJgrqjGR/NscktDuhQofi8JUYTz6IiEqQ5/fNRjt3bqe6DynbkIC\nlR7PIN+Vg1P7rk+jawhEs0UA1xSsuOImV7TDazBTxeNYf0flsn0doAfWj4Ph\nhpVemKkEXHKr5TE9B1avZUCc73z3gcfWmVeSDQWywSBjgZodNO6QYWJZLz4T\nnTq6\r\n=lLg2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1cRuqBKRsc6u6wkbV3ZxjXuBhttzFHyecAI5XCRrFCgIhAOf640D1IJm1TTDatZSO5jd1Wkr6lvA4jvCiZO+ef8Y6"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.30.1_1531835782929_0.4672200047826829"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.0":{"name":"ipfs","version":"0.31.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.72.1","ipfsd-ctl":"~0.38.0","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.4","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.2.3","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.31.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"581816a0f238c6cae2eed8c295900b5fc04d6f03","_id":"ipfs@0.31.0","_npmVersion":"6.1.0","_nodeVersion":"10.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-wMlhdqcVJ34cMcobUFET2NU3Hn2NsGxopyo8J/HEQGM56mb81W0CiaoQhzBzlOMa6MKyfsJyeYzwadn6vsTWbA==","shasum":"571432b270423a48ed8e2aa2eccfe4c8426c9317","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.0.tgz","fileCount":341,"unpackedSize":82401135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbXYZPCRA9TVsSAnZWagAAW4sP/iTp10UhGFOgJsKMCsec\ntqwbK71nqxGF5lpuJXfgUnVTxzJu+OFmqRMpAF3LLm6b3D+jcBW5rkUcAxn7\nbE55WZFOZKCeWwbFPGIzRnYVlSSypr8os/Wnz7XgL1Pwu/heCbo+DSI/4wsB\nYOR+sVR4uk396RtO1hdcFvYFJMP5LyjyS4MaIhMF5vw8mN86hGWFwW8r1Jij\naMS9a7R6NH7sbmd0ZMcMwK6+OtrFNdh2toRspc6bBK4Xe9kyXrrZFFVdrZm1\nHnAlMwIJ+g2slT0vyfPeWmLWDZw60uoVy99++q6eb+qlqV9SetoH1oepMT+I\nbx60drGZohb6dSaD9BW30J72KHGFQ8JTtp+6+wE76tNw9/1f3FGHiHxh7PvL\nbbXaz24BDlRbdjK5OW6PgPinEO5LfG0ZQik35D79QcRfi5ESBkxrCq2973kL\nReMgf6oFpZKY0dIzsES4uQFRMfpbiAirqdQKVVYjTwUFlcrrNUuFDi02UQLD\nixsapCPf0PmU/fgRHiBjF224wMCCaE/NorfJxkPoqfhohHjAYWDWYoUbhjFY\nd0nH8lROPi9ctJMH5kztKWNykg/lcTH73j67XmNlGAeZBMSVr8g0IF9YKae5\nWW/aQhrc+hYUfEfuO7pywNr8BhDNWx2piTRce6ubmQ7CLvY3a8LdvKMpkAFo\n0B3d\r\n=gFOs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAN3Zs8LyfhOLUkbfbJobwdFynSVHisc1OuOKYdlUgyKAiApC/EIWwMVAL7022vXEMg4OWfnIJkAgH7eRi2BPZrOKQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.0_1532855886866_0.2749494446221701"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.1":{"name":"ipfs","version":"0.31.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.72.1","ipfsd-ctl":"~0.38.0","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.4","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.2.3","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.31.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"5e80ee3a5ce7b509b164fdcc6816f0cfca896047","_id":"ipfs@0.31.1","_npmVersion":"6.1.0","_nodeVersion":"10.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-xe0wUkDAvLlSrJyyFtZRdZNJvz0ikW93vRKe3Z/OWkoaaYkBhyWgrQY2v8w61JlWxVMnt7PMhMGzVZRPciL6Dw==","shasum":"b00127724b5b7ea6647128d1abbb1d5d485ea81c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.1.tgz","fileCount":341,"unpackedSize":82401228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbXkTsCRA9TVsSAnZWagAAhGkP/jRwntGsLfrw68ubWPke\nDYiRg/+bzQbC2DSqyp3PpWjkyLnjMInOwXlON/BLkCcewL7Yvyhj3lZxqxmu\nqDBUrbXRjpON5HOrdmOZg1YXtTCv5w9Y6j+u2l+rGTbeI+SYdaMUiz87TqMT\nWNFCqafxP9637PkyGO1V+q7ZdwbK1VwjPNpgkZsypSFQlQKh6ctYHsLWqdeK\nD+B+OutOei+ttRQJT3LxA/h59ZL+H5WhRI9wRTKhKDSXpymizo1fN1CNLMKY\n8fAzaWSh+b1G4mZQ4gG7dRhYx8JbFBEY2qYffjTajnYakoPctvRXhOAqyGCS\nsMlrliz79wQclPqnRXsaa5xJw4WMiq3S79AOM2R8bMLopHZQymNrPeY3Mj1i\nmtkbL7nJIm5ls+irfG1w7QXDbW5EjZzMd9v0++0jh1XOp6Z+rXEzPEBggj9E\nSeUocAx1lmJPMHZRqX1ulm11ZlKaW7+lsSJ0dXAw8FQo8p6IPPAxwP/LAbeh\nNw8D1YB+GKLTmCJzGKL0ZUgnAd7y60HkklcYKH+IdvyXwCewcx/zOtHtAeai\nckzDsMpGvtqGlhAl9rBI+7DVqfB/1GbBrsU4ZoP+oLxKz7+NKnZGqAnX9QJI\nWwWoJUE0kDRUtHFOUaRCYRzDFtffxOMHw8jx3TBvO4B8DAO+FFeAYSbSWsVA\n9l87\r\n=eVlH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDR5tY7gzqsbnSEmmdOvSYKqIJOGXL7MnqPj/QCOm5AWAiEAjOGsc5zpkndA14gp16HeW82/hy90AIQ/xPph8CBxMsY="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.1_1532904683943_0.3705338200487225"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.2":{"name":"ipfs","version":"0.31.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.72.1","ipfsd-ctl":"~0.38.0","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.4","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.2.3","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.31.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"7860d0f1ce4b3d74654aa5b8e7d4c66dcac2a34b","_id":"ipfs@0.31.2","_npmVersion":"6.1.0","_nodeVersion":"10.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-mgpzFbFgLOwbhjYIBBUw3dRl1oy6AgdgZgHmVRkWmVPJmLbg0NquyKJxRM6ItKI4+TB0+lCE2jBdm2cf8XsS5A==","shasum":"d297122d23a379ebee0a65d0df7b9540ccb6445a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.2.tgz","fileCount":341,"unpackedSize":82401810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYxmSCRA9TVsSAnZWagAAgL4P/R0UYoj7gq5rHB84BBPa\nMkcldC1tct6MXno4orSm6aKqZEJ4yCfsp6ghzHMHE/ohMw4xz0dU6dra176A\nFlrrWDPsOXzwMAikOPF4Ntk+VeXk+Ts+qt3+JlafoD+EP8iWRX3ZcZvQObK2\nwRa4Dk5zllCuGXLQjnAV3a3LpNDXMhg/nOfDOR7qoNOZ1+rJOiHWGgHwaS4D\nDqUqb5QVdBy1FF94XRarnPwP1dbj7C12fMV2awsWkQ57T+tJiYNDX9kbpiPj\nFmpw1dcarBeFygEIw7g6UgLhPGQIihrB9EuXEPWmvjrmZ78FCQFHuTcK2dye\nMQeFhWuQLRCHssgulEZbs/VWhWkUXfVVpuOqnru9utBBSbz8wiu2z1M9l7UA\n2ACwG7lxHd7EMDDOicG2gj2e2C23DJryBlHl/ZpLOpKPyJpXFl2p7kHuzkz1\nHujq0cu2gONnSxP2BOaArsWxU2Oi+Jdr6ZQ4EdIx49lyayJvd/Jc1v+sc59i\ncDm9iHW7lrRbwfkcOpwDtWXWsyg/oSgcJy4/hoSE3sb1UVecFGPzHG/lQoIH\nIatzZU5BHniU8FLJy4Q8dG5Tl9vbIZpJx+I6ymIFxW0lXqjmEjWvkXV+HBZT\nqXqYLLb3wL9Hcn23KX0zZ/Sh4WEDYjGBzqY+68LEYNGh3esZgP/HxYA4zNFf\nvHXu\r\n=b+N8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5yfWE/yoDWeBBXY0OAYcTTkwDcKEH0ZiBxBupQhQxyAiBWWGOaCOuf+M9t1y4G6a5rQSXeT5iUuektmeyytlLu4Q=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.2_1533221265035_0.4494646156004105"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.3":{"name":"ipfs","version":"0.31.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.75.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.4","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.2.5","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.31.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"86222643b3825df0a94e645e887d9b47763b5031","_id":"ipfs@0.31.3","_npmVersion":"6.2.0","_nodeVersion":"10.8.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-gc0evhSuyaSlu68uKFyLY+WMpIfRUjSR4BTIcgncNTBD9AV0Z698RLF/XDxflsyDuS4cHp17nOeDUHQd2Zd73w==","shasum":"40c5d2d547cf16013bef17d7430d878d6318a335","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.3.tgz","fileCount":341,"unpackedSize":82403582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbAoMCRA9TVsSAnZWagAAuYcP/iWPfyuGP6fhGj83D9Dg\nxbFjDZ1CdSdP7Ey+yCqPUcJszKnMN6u2H4tcusEfe7jYBKhV0780+vhNJ2QA\nnV1D66u1rWm213HUI1w/8Nkg7PCgC/4ya3fnm6Sg2FnZsQdxJLdyjX9ygpgH\nRHX2QsZsB2vrAjcz6pA6+0XIsEsWO4j6A3bLiPiSKNSHoMujHGpC0e+3D3mM\nzu9Sa6SB2/U73rofQOccPhGDKYQAr7E8cOYxVD6NPoHlqjT6SFIUJoU7RPLW\nO+NBuUEn2YJoRJzoNxvGwxRylxAtjiT6Ypd147EupzmWaExdCUd1T5YMefl4\nW/Ieve42B+IhmFKOanQVULSmcRkkMDYuRi/1VDIwMGB+zsR7lCOXUAfeGNye\nUzk/0ZqCIcyRKjcoCrdgS79u2XJxJiQ0q5CbRV2DEfQFM9L9xB9Vtc5ja3xF\nSUh1lIHD8+xy7NS1mQ0ypk68s6+kKziF4RrFVKU90wIX0nw6zXq37A3FO9fC\nTLg7M8UQVM/Uez6PvIvMfdKDootWRzrcKkP0RX8cD5qKCDFlcSTuwbURlx/w\nf8kvo/rbnOuQUrdsvzXQwwVxki1Dz3u3YoPIcVvLY9ttSI927YndJt68gVGr\nL/vx6S5Sxb5D2TKuunZZoaCzmphctMoKl85Pdixksq4M3OelfB0uUPw9RVce\nD8c6\r\n=a9gG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDau2XByt1co9MNmo5pIoElHbMAG1zPkjp4eSHxrAaxMAIgfLnet5KrTz6xzBaarKmjOUS5b4N7orCTC6wLhotIunw="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.3_1533807113555_0.840112050616143"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.4":{"name":"ipfs","version":"0.31.4","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.75.2","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.4","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.22.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.1","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"57f977fd21e09d274d548e96417f37c516186fbf","_id":"ipfs@0.31.4","_npmVersion":"6.2.0","_nodeVersion":"10.8.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-klHYDmyVBzoZCc6mH37L4a4Gk0TUhtzgjD8onTsZIx6Zx2uQ3jLYUKibfxHfWjwLi3miHGdfdl42DV8oGbYzsg==","shasum":"3b55c6b051b500e491cddfac9e9509b82a80beaa","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.4.tgz","fileCount":341,"unpackedSize":82403490,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbB1yCRA9TVsSAnZWagAA0XEP/iD9QbkeObKDdyenYTMG\na2Un1memmsBVXnhI0Io9mEr+V2nL2IcbZ6xFQOOFTo18ERnghPVNj8rDDrvC\npumwbEnrVsOlPhzpysYGoP6jx1FHKXaAmxjTCWhQ0iwkLF1Sta6SON5D4IGq\nt4gQPwv6MWMY8Fl4YyLg8sDYofAXcab/D1VUKqe9VoS80JABaf+MRN0N4Nr4\nfYlmnAnlAXzq5pmEy3N1ARaqX8d58QNAodMqYQ1YLYA+Ob1Wizl0J719tFVy\nCV4AWtRoNUy3EwTNEl9xBx2lrwvDrI/KUhy/QkkDDIxwiDDXJsDyrpZraWQ4\nt6WCxctfQtf1CVnwgxSg2Wm+ew8p61FPJySHim/SF9iTxfodfT75C/qSnhMG\ny9mFtmC0sRSLFl8DK7+17Gj6EetJSy6ZxKt7dxQsR0D0WFGTK4KVT1XJioYb\ndLdw9nO6kz2UArAF0iYNbh2Mo7k4vGdREJ6A/QI01UqdiQbn7nmr4CKKo/Kd\n7RyrkKFKmUMGMCEH7YkXVH92bbhrfm4rSfpyjb0B2hda1GvIedK8oUqMtx9D\nUANkLUXO3B/Uq8kP2EPXkUIHjqbSKAM6UBtWkq1A9AxnMhK3/uid4a2iLcOa\n4aZ0JLyEQR48XgWXI/9BnIqyJLp/GBsZ2Ee1cCHyZcbBe7XkFJCo6OxCLXGy\nTyNU\r\n=XYvv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtz9WAD4g8wSoBoJbc3n94j3t3oB+bXRjsXeDfWZ/GzwIhAILDPUwn1mtgmZtcwSqw4ORU6XYuxrh5bbUknUDtTYVf"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.4_1533812080683_0.10557332641085582"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.5":{"name":"ipfs","version":"0.31.5","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.75.2","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^22.2.4","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.1","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"04d8ce30ebfcd8093286a4eed97cdcb3cc3fe4c9","_id":"ipfs@0.31.5","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-FQELO+JDqEno3Q4qCLCCnxRFRrd/XpMkxlA8rkSnqnPSbK7XZQREYXXwXLY+9/tQZHUmYCGfHtJbHvMHM5FWsA==","shasum":"fa23cc4bb101022d9445df0265fe88f10923a5bd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.5.tgz","fileCount":340,"unpackedSize":82403971,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdn7xCRA9TVsSAnZWagAAGggP/2aoKM2p5tGSb68FOyJJ\nd8YOjKm8AkMlgchcwHWSllywQLcRgl67TKlu9rjvsLwxNYB9ZR3Es8wiytzm\nKbil4/DT1jVKys66IbbGygXIWXUHMms59UG51lTSHv3YpjCajMluntKXPn7U\nAUK+9Dxvc9Xt3kclH6MERRcK6qVx4zJcpsbzd3wdTwEURsfDOKOT6A/N3erG\njZDABUkhKwbQFbwLmeUlrq0XdrXZNAHxcgMeu6zv0IHHch9CXrUnKMcdzONE\nC4OrWcJ891KdePfgPu9qHlT6TYH7smnDjNq2MZP8Zpb+xsbqqLTP9e53VoiM\n1/CjtCuT+Qe0lda0wlJDrY+IjT2bvnZO35YBaFgXEMhZIgm8u9h69cfTY+a0\nIsf6EByD1mKBwXfKXC8uDr0kEeHxDhvRMnnFkwHpykZmuqhQyXT//6MyeGkm\nRTLdrBGEMbfLRmnyk+VxLDPgAcII4AP4UeLZIGwNDcmU15VTddh5N8hECPcH\nwhfW2wwdDDmleCoeci7iik+EOjYLJrOhqfPdT0oUBnill48m0ckfoRpwOlpx\nmjcvvr+65M96UczhhppYXctA5LDF28TeQaDmem9dFit4zOU/oVjZD7Fgx5/a\nPaxV7N+PAGeKMtmqYuIla6rVT8Pc9GVX0Xy2igRbjiLnor38BJUtR/TvAthA\nJum6\r\n=hFVI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFznv31e5Dqija+nq22BEBX37eyMc6+VUL1yDx9rh9yaAiEA+2xGoGi0N0riVeL4bWy/CEwn/PvcvQ04bP1/d/PtEYY="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.5_1534492399801_0.8085258639387165"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.6":{"name":"ipfs","version":"0.31.6","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.1","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"9368f37bd9913743ea2166d3689cfbe4bf8c9421","_id":"ipfs@0.31.6","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-qO6hkNoFOPeEdbFuuPirotfJh+Ym9s4gqR3do1NWfKdPGVGCDZUcBQJ3/7LSqg2NTbP+SCbsANV1iyxZV30xQg==","shasum":"4f24c4fee74e11f9de0ed5b044ab03861d3417dd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.6.tgz","fileCount":324,"unpackedSize":6253279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdsLVCRA9TVsSAnZWagAAnOoP/1O3BapE7vUxfsVlzVBE\nqEpt9XO5aSZn4dFPtO+e1BXUDZUtRyp6UdHDCYdFbjFxbsOHbwXvdl4aZheG\nYr4xe/K+TmI0wTp2V/0OscQBwpUFMDOT7O5ygMKsJqrM+ogEIUKnQImWM4oc\nrBDREHGyLNUJMUxWIGo2cNbrwzWT42ZMONzn3G1KZ035XS1Es/+SUq5+YJsG\nMqsZC7yKc88t9nx/DOjsnjnaxxx8U8pqAxJJYjcnK0S0Q2zMeSFJz6KjLd7b\nDdQmYVFV7ak1LGtBbCyIvq1+Fy43L1IXAgn3BTRCzdlcuO2r17Y9bq0b8jtz\nAFmuFgRFfRFszi+Pcu91+ChlRLmbDk0AtvVOHeGcH3SpIWjWlLmVZp0n0RXh\nMaBVOxfMZsYFL2sC3aHtOa9Oh2TLuFAP60B8VYhicOndzRQGVhhX5FfBsosT\nSqGMCt49/m3q9YKlfNsGKYdlBPw26eH4kIWsjkQ86qpRqcibnFdmjvWhlYkr\ngo0qJw57nYMLaMXFq6ffGf9BmW6JjHT1q589pru7hLMuu/FKybplfk8qXpEb\nwoI6gDsliJo7S+Rl2lP4vHQ2hsPZAvlrlsAHOmVNWn6MdxFO9T4PScrlkaC/\nKQ7lrdlOSyjfoBTMz2K8ScWqVAlAsCVXOVh92Pz9iVqsgP4ccbqlBX+gLyX0\nxvoa\r\n=I0c1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/8wdlEJJ0OLuFKQiobW1+oPqxFdR4qU+ofdUVkwyf7QIgIklRv57I90f9hzPlxf1FHadLWfmjfquPV3veiUIGcd0="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.6_1534509779826_0.9925498116845843"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.31.7":{"name":"ipfs","version":"0.31.7","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.1","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"3d2a8745949d17ae9ce64e89cc231c1d526dd4b4","_id":"ipfs@0.31.7","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-HuA0Y6K7Y6f2Yu+ehUlGhv5VF2PtdZuME1AWYu/8zkfZ+HRpIYANjoK9GqZh6CQjOTJnIrEdqkHpOivUrZnIIg==","shasum":"4383c263421da9e6020257e44aae3759f3fdc7f0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.31.7.tgz","fileCount":210,"unpackedSize":16335830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbeyNaCRA9TVsSAnZWagAAvzgP/j06+ohdnMS/qyIpDLFM\ndl1CMe9Y22ssCyXL6kGZ+CGz1w2d4syYMEAF2ZEHRcvOPj8mhmRy7lHwaOtR\nz4t1c4HOTiehJ/iyANtobqHgLJwunYmkY4xAAeUYZYYZSDkFbT5ObBCujoSY\n1L+kUGMKHIKU+0F06WWn+LRf258J1yM6kEeR6g7EretBznicIGmQ5DAmwUd3\ng4KUumRVvWJaThuvNqBwOxZDvlfBbPDxCj7YUnZQHk/uJy2xy7nKT4+gwxkS\nf/leJSaVe5GjCSOrY/rK7vKkdl063nn6GNITqEdqeJlbLndpVxNFU+hX8g69\nniRP9PIeOuxzA4y6RgmioDqjcldNmV3+hbDzupHlaOByL/Y9x8kOPzybQmT2\nzFhRNEMR1w8VptNkyANVydSUQhZVex64tMnG6g0tEZph2s02mALqS88kU6M9\nDXyiEaIVf6ElNNI+QsMLOTi9t5m6jWj+tQSV+gfA1r9Lr1y2vr8EF7u86U8Z\nXc4wFUO/QPEvxYlXd2Md2s05kojXn3JeAiLbQ0Fdk6FGi6+57vUwA3CgLZI0\nuMNbtaIhF0PNGOHVo/AAcmz6dBu1eUj8Sjo5Asbyzag+jSBwJY6qTN+JfsWz\n47Y3veeI/+alTNnsp3Oq+2RPj3thmfwn7G0rk25z8MBnSYtGEvnc33dJoAP8\nCs5n\r\n=eMOU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlExkZ7Vt48Pnazu40jF9uj7pfo5l+Dg6wfBLrsbuMdAiEAp1NsG1qPYKWiG0PWqw6tUIe/Xg521DChtUJu9c8IluE="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.31.7_1534796633324_0.28092185281537585"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.32.0-rc.1":{"name":"ipfs","version":"0.32.0-rc.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors","test:node":"aegir test -t node","test:browser":"aegir test -t browser --no-cors","test:webworker":"aegir test -t webworker --no-cors","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.1.3","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"fc3661424b22b11cd6fb620c7695db9b2d339c27","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://ipn.io\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <br> <a href=\"https://waffle.io/ipfs/js-ipfs\"><img src=\"https://img.shields.io/badge/pm-waffle-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core/issues/55\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-Updates-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs-unixfs-engine/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-unixfs-engine/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D5.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D8.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Waffle Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-unit-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n- default Bootstrap is off, to enable it set `IPFS_BOOTSTRAP=1`\n\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-api](https://github.com/ipfs/js-ipfs-api).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure external nodes that will preload content added to this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interopable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that ocurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [files](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.files.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesadd). Alias to `ipfs.add`.\n  - [`ipfs.files.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddpullstream)\n  - [`ipfs.files.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddreadablestream)\n  - [`ipfs.files.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescat). Alias to `ipfs.cat`.\n  - [`ipfs.files.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatpullstream)\n  - [`ipfs.files.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatreadablestream)\n  - [`ipfs.files.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesget). Alias to `ipfs.get`.\n  - [`ipfs.files.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetpullstream)\n  - [`ipfs.files.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n  - [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n    - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n    - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n    - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n    - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n    - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n    - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n    - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n    - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n    - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n    - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n    - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#get)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#put)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#stat)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, options, callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid [, path, options], callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid [, path, options], callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md).\n  - [`ipfs.object.new([template][, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.resolve(value, [options, callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - `ipfs.key.export(name, password, [callback])`\n  - `ipfs.key.gen(name, options, [callback])`\n  - `ipfs.key.import(name, pem, password, [callback])`\n  - `ipfs.key.list([callback])`\n  - `ipfs.key.rename(oldName, newName, [callback])`\n  - `ipfs.key.rm(name, [callback])`\n- [crypto (not yet implemented)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/)\n  - `ipfs.bootstrap.list`\n  - `ipfs.bootstrap.add`\n  - `ipfs.bootstrap.rm`\n\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/)\n  - `ipfs.bitswap.wantlist()`\n  - `ipfs.bitswap.stat()`\n  - `ipfs.bitswap.unwant()`\n\n- [dht (not implemented, yet!)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, options, callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, callback)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined by you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#addrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#connect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#disconnect)\n  - [`ipfs.swarm.peers([opts] [, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#peers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - `ipfs.ping()`\n  - `ipfs.init([options], callback)`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#stat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#version)\n  - `ipfs.repo.gc([options, callback])` (not implemented, yet!)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#bitswap)\n  - [`ipfs.stats.bw([options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#bw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#bwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#bwreadablestream)\n  - [`ipfs.stats.repo([options, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#repo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key, callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bare in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc: wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage |\n| ---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-unixfs-engine/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-unixfs-engine/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Dep](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![Coverage Status](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Dep](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![Coverage Status](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Dep](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![Coverage Status](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) |\n| **Name** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipns/releases) | [![Dep](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipns/master)](https://ci.ipfs.team/job/ipfs/job/js-ipns/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipns) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-bitswap/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-bitswap/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-floodsub/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-floodsub/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mplex/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mplex/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-railing/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-railing) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-railing/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-railing/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-secio/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-secio/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-websocket-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-websocket-star/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-websockets/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-websockets/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-unixfs/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-unixfs/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Dep](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Dep](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Dep](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Dep](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-keychain/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-keychain/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) |\n| **Generics/Utils** |\n| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-api/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-api) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-api/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-api/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-api/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-api) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/ipfs-multipart/releases) | [![Dep](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/ipfs-multipart) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/ipfs-multipart/master)](https://ci.ipfs.team/job/ipfs/job/ipfs-multipart/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Dep](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Dep](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Dep](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run unit tests\n\n```sh\n# run all the unit tsts\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http-api        # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Core Architecture\n\n![](/img/core.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more. libp2p-ipfs-nodejs is used when running in Node.js and libp2p-ipfs-browser is used when running in the browser.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n  * Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n  * **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n  * Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n  * **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.32.0-rc.1","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-RqxPItCUGqq7VoPMC6IVVzZJNO0Go5et1Ud1fGTOHa3RyG31uUKhAi19UEXCy+dlRmB+eUVkmiOLLrGDKMvrtQ==","shasum":"225f7d35ac9570ffc7b44c72d18e19162dba8cb5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.32.0-rc.1.tgz","fileCount":225,"unpackedSize":16984157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjTHZCRA9TVsSAnZWagAAzzUP/0We7kk1JE6pBJxSkhtE\nGk91gW7pDOApvYpzTVkmKixWWuT7ofZdEzbGCXV4QX0GFZSxpfvTKgciJJe4\nQDBdFFby1XEyQInb4pGaNFae7jLoXCl4h6TOcQereXK3YJsOvQXIb+sLENyX\nR9siqc+0cr4SenbtBdc23f9quYILmXL0x91Uv2svBnuYwvH+qykgCWLUTnxx\nEyztsa990jAXb007/wr7pb3usmB7h+fLRNj3hFE76bVaRv7Bt0Na7rEsid/w\njvl6NCODIjEoHI/m8r8mlCsxbTkGt2VOiEPdCOl8qhFz+YBbNzyL/0ThdYgs\nuzqpeJz+8FofPxcu9PlxJT1unWyuSPSPMWHa7XUmg1Wj6+skBjb+Xb9UGNIA\nmdTem/hXb8UugiObp1ccV2ziepFZZ/LrjeTs2tQE0KTguxLgWZ6YIkm150Yj\n0EJI3dHAy4+T+mWHFQ3Uj4QeVhzYZqR2S826MA1/H8Gp4VoeiaBpxJo0YSJp\nZXW1t0iHq04HfKjKX0vhhUKBr9Zzww4bPCyv/TVOf7Zx3Yh29PUHc1+YUeUR\nw+WRw3YYmucOTgajLVWw1P74icGU9U8RSVQTF/np0SfT/dfPCt0iLxNlF4Xh\n2z0AbMB8nwLMO7Gai63R9B9rwqN3i7gD8GQtHwYbULojJdR/qaTkj285r+Es\n7IKS\r\n=FxQU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9aFyfQ8NRMtc6pbIBido3rQBPsNZFHL2S20lsUzBFtwIhAPbqr/+spPlxca4Amk0pIwkNlZpdIdwOSGtH8B2Z6FR6"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.32.0-rc.1_1535979992338_0.4759545635350284"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.32.0-rc.2":{"name":"ipfs","version":"0.32.0-rc.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.1.3","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"dd977a5569a5084cfb2948a791aff03cd9f56047","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://ipn.io\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <br> <a href=\"https://waffle.io/ipfs/js-ipfs\"><img src=\"https://img.shields.io/badge/pm-waffle-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core/issues/55\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-Updates-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs-unixfs-engine/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-unixfs-engine/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D5.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D8.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Waffle Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n- default Bootstrap is off, to enable it set `IPFS_BOOTSTRAP=1`\n\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-api](https://github.com/ipfs/js-ipfs-api).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure external nodes that will preload content added to this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interopable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that ocurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [files](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.files.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesadd). Alias to `ipfs.add`.\n  - [`ipfs.files.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddpullstream)\n  - [`ipfs.files.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddreadablestream)\n  - [`ipfs.files.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescat). Alias to `ipfs.cat`.\n  - [`ipfs.files.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatpullstream)\n  - [`ipfs.files.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatreadablestream)\n  - [`ipfs.files.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesget). Alias to `ipfs.get`.\n  - [`ipfs.files.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetpullstream)\n  - [`ipfs.files.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n  - [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n    - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n    - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n    - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n    - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n    - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n    - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n    - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n    - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n    - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n    - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n    - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage |\n| ---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-unixfs-engine/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-unixfs-engine/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Dep](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![Coverage Status](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Dep](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![Coverage Status](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Dep](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![Coverage Status](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) |\n| **Name** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipns/releases) | [![Dep](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipns/master)](https://ci.ipfs.team/job/ipfs/job/js-ipns/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipns) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-bitswap/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-bitswap/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-floodsub/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-floodsub/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mplex/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mplex/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-railing/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-railing) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-railing/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-railing/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-secio/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-secio/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-websocket-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-websocket-star/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-websockets/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-websockets/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-unixfs/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-unixfs/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Dep](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Dep](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Dep](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Dep](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Dep](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-keychain/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-keychain/job/master/) | [![Coverage Status](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) |\n| **Generics/Utils** |\n| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-api/releases) | [![Dep](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-api) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-api/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-api/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/js-ipfs-api/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-api) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/ipfs-multipart/releases) | [![Dep](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/ipfs-multipart) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/ipfs-multipart/master)](https://ci.ipfs.team/job/ipfs/job/ipfs-multipart/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Dep](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![Coverage Status](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Dep](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Dep](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Build Status](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![Coverage Status](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tsts\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Core Architecture\n\n![](/img/core.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more. libp2p-ipfs-nodejs is used when running in Node.js and libp2p-ipfs-browser is used when running in the browser.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n  * Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n  * **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n  * Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n  * **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.32.0-rc.2","_npmVersion":"6.4.1","_nodeVersion":"10.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-6eIi8nzywmz6WIQYKym93ufH9kApZOHtxkyBCPXlkIQq7bOOD3KFMC930lXs4cGb21Jvpde9eoAzmecIshd1iA==","shasum":"d323ab05940ef9be8a5c18bfbcf76211996cc91c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.32.0-rc.2.tgz","fileCount":225,"unpackedSize":16878320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblo6aCRA9TVsSAnZWagAAMUwQAIhWXi2BArvUL3CK3SaL\n78HC4GO7tYQ5I1UIhuJ8Lt5oK0qJedTNH7AbMiwMIIHilBRj9pv7i0FPFHq4\nb3NWKi7wktMX8bs9KfWyAsTQjBzXTFugtwK7UWB/0OKS2Zw8lVX8j3XJhkZ4\nNYOWBGp4zFFLrWSXkm95BkMSCYIHXRHbbbaaP3fq78K88ml+XNGjTUgPoXDk\ntyK1V/OLsvei/jQTcimQZPEQ8UhDUNAItpglOQI9N3BWjURxMQSVPjZya+2h\niuSy0wyBrZqBbqBssas+utVtOAwOWvWw100K2nWMxFIx2meY7DL3w4n+227s\n1QzdVV7KQffZ6BUmb4YRMInjscqG2CY5Scva4MZweZ5WaLQWIwIY0wpy0tve\n6ZamqGxHwHbHfnWkhll2rJDJdLqPM9xaqaRdhoTlnI8ePsON7sXxVtEwZK+R\nEAXYzjtqL5d784DnBoZq39JrTLbQhhj8eBZ25CUfvVw1EINOUCMK8iXx3lRF\nU2AMWIlAyOzW9jOazPgb9daWNnBVKd2gVs21LEobcvdp11jEgTQNcfenkBK0\nQ1ZaipUwq3A0D4eJtTFnebWluXapmAzlk4Q77q1J/e6w9RQ1RpD1dO/Ev5Jh\nqde6uCYuuEWB+KiWQQ1WrvraqM/YxjvRP5G9QkHUuKkwoGW/QJ39AdFTPGgm\nOKY1\r\n=HRUQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCb4iIdCpfSVHyrjxuRbwzCAB1SWstdSEoTa7UTuK55vgIgd1rluk305ZSwXdXI0E2NQ3ImW7rhSbpTCDLTNOrXD2Q="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.32.0-rc.2_1536593560775_0.04586053468898066"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.32.0":{"name":"ipfs","version":"0.32.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.1.3","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"ccad1c82430425ece8978d8d7585301ea22cfca5","_id":"ipfs@0.32.0","_npmVersion":"6.4.1","_nodeVersion":"10.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-Jxh4mbRaeToKTCAYDn13MieVJvgg66xb5SaKfM1Xif87dLHmvgSngk1dImbop9sDZN7gVk+sGZbpuNINLTP2Ew==","shasum":"2abcd11fa8dbe47182f3a1ed80f4082aa8ed88fb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.32.0.tgz","fileCount":225,"unpackedSize":16890996,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl+4lCRA9TVsSAnZWagAAubAQAJhxTGhuUp6EcuVAAs9g\n3ILOmDcwPpml24Paog9ftoZvWwH9tCYXHOaU1Va8IZDS3J4EFfefin+QhmOF\nvwxCdWBqHi8J73gLdn+Vg4mij+ciUpZCOlZ+V0iwpBsl35QxwIppXRpVbL0y\n5qVpTKcx+ytpWG3yPPlaEwS1agqzxJE/PPtjLpnQtYTigyludUCdX1R4mLI4\ny+k1e53tbuyEKKMJy2iLQTdBSHeNDNMtw3n96m1+SDyTYKZlXecaFDwXLVqq\nJML/aBWwHKsgFY81xqR3wRlXPhYrl5AaolZIu6nvCcRmreBEL9tO+fjboI1s\nRiUhZwvDEqQFVo3TDjq189sA2RNo4L0wHl7oghT3BX9A3uQbchiUSuugpUlx\nmL4/erGdWXGBvqXc0U8bPS5O+YAEhKexFKgDPOotEgk3l55MfzeNwpHHBYXJ\nrWNOzYItnh2lwnf2K6X8Wc2JJgvCwYgCr2sYuPUlHQ/ohuVfKRbyF+Z9FgVr\nmpzmGrF6rASthQhfiVromVHc62klRZg89TMCUX+PoVfxkPIVipAZLXAMpfBt\noxkcTphriAzW7F074vFXbTe8JLGkxR0+3mR6hR1cpjSlsItsXBv6efRUjEu7\nOMxyYEudz0o2ojfMQuHlhW9wKHtYlTqlMBJ0UFipe8svabnLw9QB3WQw1XFB\nnHXf\r\n=4Fx/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFm0mbT50xKKzWnsKUyqajk0Kk9tMQbEfzrkmJUM3ApBAiBcgrIdlinnkBYaBkjRFmX9DUHEXvQTHAt4xptwNXS/bQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.32.0_1536683555827_0.37088612200713356"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.32.1":{"name":"ipfs","version":"0.32.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.1.3","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-crypto":"~0.13.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"cb568a9c2bdd01fabc04ef821e6befdd91f0245b","_id":"ipfs@0.32.1","_npmVersion":"6.4.1","_nodeVersion":"10.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-BkE7xgWkT66BGp0V5s4aRr8deALkBM0e9isD1DTXn4OIlpiYKy5zrxxJBjsUYzX4QCiqpL97HVqY2ip3524KZw==","shasum":"768d502e756e9b99d92759198f0c589334c5ec5f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.32.1.tgz","fileCount":222,"unpackedSize":601477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboLx8CRA9TVsSAnZWagAAoF8P/iJUwTc8WUjAQeKITvng\nBAHpFdOw6N+y9dddc1ConbV6kqb8/mpvkxIVWaONSfrex7ryyFWq6E6x1RNK\ncEl5FGKyaDYeF4/I4adfuc/JAHY+Y1zpsBmmHTmjoQc+jle9BY08HicbZBZC\nOpfMTr+OHlROZlFXR+v4hHVgKwwQOA9bs7e18Y9VmtBMpuoyLUjvA3rhj3K5\nuGduWw8V8XVxROWzm0bJpgV7cVm+MTVSfG4uXWLobD5Ey24bvC2FUG9+PeCT\nlmD6EQF9/jo9fcMO9bc1KnYQSkCPCjd8KrZk/oCmY7eOwpI/1die5c8Xuh2l\naSP/s6bopkskQF/sCgdfH2VoOUHMfRQV7BTpVmtZhX+KJBW7czcrJW63BySw\ntNsZ3+ZPifUjMzdRCF2QOGX1qaH5YFcRWs1i3UdJHuuzQPk4heJNVkaQGpvq\n0AB3f46uCPGOgpXOKqlpuVZCxPJ0BXZPl6gNrJOUWOhNNc86a6t6TV5YEROZ\nbTngCwgpvQ1ToX0KN5Tx+dwCWoTdJnGgU0QojidT4EOMMYN5vkijJMUqbd+h\ni052w8DVL/gCxMrNOubabWheeMZyVBRoEqFUDhr8cXTFWzNXw7Nuw31wdvMh\nVzHlF00qKEdoGlMCj0QfmRSiMy/8xyMPv58+q8kQPrHmRpVSTb/TIcPQdQWQ\nkPVp\r\n=idPm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDE3ZMqZNp8rZxGeTENC/vqcI5hw2AIuP5VAVCqhQFU8AIga3NQK+u96enjrMQw4Hmetc6jZIE0PRF9pNAlEUsMNeg="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.32.1_1537260667057_0.5895021941365277"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.32.2":{"name":"ipfs","version":"0.32.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.76.1","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.4.2","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.3.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.23.1","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.1.3","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-crypto":"~0.13.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.4.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"88c735a41722ad5abfab9f5fd9c5042aed32102a","_id":"ipfs@0.32.2","_npmVersion":"6.4.1","_nodeVersion":"10.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-snIyTqFkNPiu8/6ORMwYGCXPmLx7rRCvNm/Es6U3A0UpoMiKmFPO7ORFlVzHf+m1to+O/DYR5833Kft8S+TGIA==","shasum":"8570446dfd3d500dcd99fa99dbb9b15d3edd0e91","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.32.2.tgz","fileCount":225,"unpackedSize":16894249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboi7RCRA9TVsSAnZWagAAQkYP+gNtazrkkdvLZ+FuXW82\nfh5yGcXfPlDhuhaJ6DlDz9pnIFadrchn+Yye5kMwfjNXlnRFyj4OiDuHnJyU\nb2r0c7UfPqQMxJefnPUdEgVbY++4Y5u6lgOo+5IhqiogB7q2XeOEiyhsFpQW\nBZ9S1IT1mxaxuEpgNWxne+KKR7RIb8BDgvfv3FUIGdAd2beB+NDebUh5lKrU\ngvkYCLrMsY8lVA/dbSPmifwgInN+V0BVM9HGcIdeP1PT2ISDqVMBiusV4jpt\nr/rZbPrGczPdTm6JMMSBes1JGzo1uGu6/Ysi6sU6ht92W4yaiF6xJCO/Jcj7\nKL5FE68Zkm5f7sHvPtStMk2WrlPsLrIooOdnB47gvhgsCMSxnEzI8t+mfGnK\nsv54LmZDro99rOBLxx9MvVe55ahy96lC2tUROs3NDIUIPS598pDsrVjS02/E\nZrirZhmwgBFvoXaC/ltXbHQ58zjL0MY5ioKX0Q2y6vt2E6Qa02Yr8ccFdU+0\nZr12ABv8QNdTia58DmDuozBYzBBDXTnTcwpFWhKVu/qAhuvVL5UP8wl88rTN\n1QAS4wqSEiUgpyn8e+225BxHrx+h92srYS+YWMILD1WmtzTtZD+bWMktlahW\nE1KxI5uLH/AmqrfukMDqmBrQLkpV3DR0rZq5b4exIun3S/Td6qBVy+hHykmS\ncYCY\r\n=xjjj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8R4UUea4Ks/BTV1fv3yh84b1L29+nTBu4PAo09TkZuAiAicrzhG2+aBQhPvxc1iChfxsWWaybQLPEMYb21r2Isrw=="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.32.2_1537355472649_0.8253663358966601"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.32.3":{"name":"ipfs","version":"0.32.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.78.0","ipfsd-ctl":"~0.39.1","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.5.0","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.4.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.24.0","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.2.0","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-crypto":"~0.13.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"9a37ac0eefbdab94ef577f35f97b77a8e1594a50","_id":"ipfs@0.32.3","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-5Huc2ykrTpALR+GDmo6WvNcji6y3tdwZQUeq125hZKBVGLSpQfV5Pqm2/0paJUH7eZEO4TpGgUMlFzg3vUDbeg==","shasum":"5ed1c4c263f7280bd96de6f2fefdfe7042f2f8ca","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.32.3.tgz","fileCount":225,"unpackedSize":16907491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrqavCRA9TVsSAnZWagAAHs4P/iBS7JDZ3Tww1QlIGdBs\nABVfGZtNznu1Lcgc5hnkQsK5CyfnCzRaBRMdZiOOuSwOCnBmxSQA7S55GxtZ\n6ONGrDluCQ3xdD33VMcKyW0b7RkxzeFeW4NdgtvaKzJCU2wQ2FjPP8HKY0+Z\nlAUu5PlFcWXbYylZSuFXOKc6ha69/fwfiDRIYFyorvS+GBNlOLLyvTdn6dMy\n4jwqVwQp3zG7TbtqTT/T/awWO3nZpjv0DvlolUNcRyoomYyK7XUCiMz1Flgs\nQmUAOhlbxpJKTipGUsCSChSijQN5efsfteBCl9MEZQyIjUdfw0A1CW9iX5sA\nCXBlfqbofuVMK9egjHV+MLi+3d4vM1X2xoU2YYGCEePejar0Ye0QyNaFjUyB\n81UdkENLWqZUJf/PQhd1fDQYWiim6vEozFvo9DKSEW8gcsuZyc9BNJyP2lUN\nMYxZAdrYOltbTQgHfAjTbyTB1KjiHCQJQ1pDpSBL67aFtcEA9u+K/k/yiugl\ndbFUHf53qE7WwSCMbJq/xvoOjVl/E2TjoLRirXT/OKqKMcJS4XaEO2RTc0O8\nm05GP4+xL2BALIascuAuSuUbov+CgGIoq8JbROhWCwj+qXtICGq0o++vt+e9\nh8LXCd2xRcyoDSLJLTLlUPF2HqGxYAueQhS8xueBmMbGIUFkQ59wWNwZ55z6\n6i/U\r\n=yeIu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO2BKhr4oRf8Oq0ZbXC9OzYVuqWkwz9rqcxNgsFB5SxgIgK7M40pxZBgze8bCNEdvqBjcfbTeSDQsevwkmNvC8gPU="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.32.3_1538172589959_0.4593273814775769"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.33.0-rc.1":{"name":"ipfs","version":"0.33.0-rc.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.78.0","ipfsd-ctl":"~0.39.3","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.1.0","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.5.0","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.4.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.24.0","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.2.0","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-crypto":"~0.13.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"879802a3a157f27b822b4d4eaccca475a423070b","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://ipn.io\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <br> <a href=\"https://waffle.io/ipfs/js-ipfs\"><img src=\"https://img.shields.io/badge/pm-waffle-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core/issues/55\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-Updates-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D5.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D8.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Waffle Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n- default Bootstrap is off, to enable it set `IPFS_BOOTSTRAP=1`\n\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-api](https://github.com/ipfs/js-ipfs-api).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [files](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.files.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesadd). Alias to `ipfs.add`.\n  - [`ipfs.files.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddpullstream)\n  - [`ipfs.files.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddreadablestream)\n  - [`ipfs.files.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescat). Alias to `ipfs.cat`.\n  - [`ipfs.files.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatpullstream)\n  - [`ipfs.files.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatreadablestream)\n  - [`ipfs.files.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesget). Alias to `ipfs.get`.\n  - [`ipfs.files.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetpullstream)\n  - [`ipfs.files.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n  - [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n    - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n    - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n    - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n    - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n    - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n    - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n    - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n    - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n    - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n    - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n    - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-api/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-api/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-api/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-api/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-api) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Core Architecture\n\n![](/img/core.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more. libp2p-ipfs-nodejs is used when running in Node.js and libp2p-ipfs-browser is used when running in the browser.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n  * Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n  * **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n  * Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n  * **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.33.0-rc.1","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-Vro/pL7KMDUSEUG5BTYub73se+wG5+K3+NilZKQpcvz1N8TYvuyMURsG/kbnLAKbeg87Ui33PCkcd9WfZgwGOg==","shasum":"df93c1fe31a6512df83e405913a8a263869426e3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.33.0-rc.1.tgz","fileCount":226,"unpackedSize":25097396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyj3qCRA9TVsSAnZWagAAHPUQAKBimXTQW7KyI8BgP8Ai\nBWw2ro9FD5uCxVZCVR/RlIzB6of0y23Li75bozRPNI24QbUWSMpA4mrA2TcE\nhFhHBEkBUjZcHYcRvZlJg1eXvedGy3moc6RP9eLBE5lWBUgJqOk/QKwnkIt3\nXkngx6bmh0/quZhwPbnM5BEo9nwvYsrb7uMoI1gTQQsaeU9mPB825Xj8wLmF\nS8C+kUAv4KlYFCc89Ho5dlKE+0glPKgmw72gMU4TMLCqJHg6i8jrH/p6KkfK\nsEObOPB/ZrDlJ+xqfH68xuYSRgNGHs9uarxUbRybQvyjE12tmVEN8up7nUxU\nFGW9PMpA2s/gHqXQBu8f1Wvl7vuRRS4H1WDl617XMg6huM2M88hjQKaMi/JH\nhDggpO5bMIKtObEoMCQs9MZbjFp0gP6NdKtXbgDuaVWVsBDR2MQfp8990Ff0\nVx6OxXotrF9d86+Xqn9LF66xVbjmhM9pACR+9RWdE2tX29cEVf916SE1FvXY\n6zqQACU3XOTnZcfFGnmbm/goO/C2ew5c58HhO0t3Fr2OejyNeboW/QrVxeCe\nkJazn58r+TJwIANI+CSkUG/+/pDptBL9Lgzf8cl1LfSzy61rRLMo/HIfxVOP\nwSzqd4QV3RatEvKlsqceUu6WzH/DWJoAVo05Xg2bVTxgBuPcF10TWaJfx+vk\nYRfP\r\n=Nw1X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIANji9ShJgtQWtrE7eCjh1O1psA6F2Kc1GTrSIysXAxPAiB6eqLErgM3BXGvq1xwohfViqNu1tPq8ahBHhDsd4AXlA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.33.0-rc.1_1539980777921_0.35678562384150947"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.33.0-rc.2":{"name":"ipfs","version":"0.33.0-rc.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.78.0","ipfsd-ctl":"~0.39.3","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.1.0","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.5.0","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.4.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.24.0","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.2.0","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-crypto":"~0.13.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"be32cdddf204902fe568cace463fae5a29c7be0e","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://ipn.io\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <br> <a href=\"https://waffle.io/ipfs/js-ipfs\"><img src=\"https://img.shields.io/badge/pm-waffle-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core/issues/55\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-Updates-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D5.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D8.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Waffle Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n- default Bootstrap is off, to enable it set `IPFS_BOOTSTRAP=1`\n\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-api](https://github.com/ipfs/js-ipfs-api).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [files](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.files.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesadd). Alias to `ipfs.add`.\n  - [`ipfs.files.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddpullstream)\n  - [`ipfs.files.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddreadablestream)\n  - [`ipfs.files.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescat). Alias to `ipfs.cat`.\n  - [`ipfs.files.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatpullstream)\n  - [`ipfs.files.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatreadablestream)\n  - [`ipfs.files.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesget). Alias to `ipfs.get`.\n  - [`ipfs.files.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetpullstream)\n  - [`ipfs.files.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n  - [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n    - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n    - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n    - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n    - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n    - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n    - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n    - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n    - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n    - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n    - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n    - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-api/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-api/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-api/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-api/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-api) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Core Architecture\n\n![](/img/core.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more. libp2p-ipfs-nodejs is used when running in Node.js and libp2p-ipfs-browser is used when running in the browser.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n  * Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n  * **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n  * Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n  * **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.33.0-rc.2","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-JU+0yR1boV1FNqrcTTQELH7DjCTR5NSTwKZR55DwfrSNQu03EL91Vh1CEhAWhei35PR8BMYpOyGW6zmD7zPG1w==","shasum":"fd2b6140ba22bd2dec3229f40f1ef6711cd697f4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.33.0-rc.2.tgz","fileCount":226,"unpackedSize":25096468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzxPVCRA9TVsSAnZWagAAyRYQAJbLictAc/TRhagWzcWs\ntP71gn89xFVAaJoGRoH/jA52cQAuR0OMzXMBrlDqZ/3ARS3dn3KQ9ZG81arG\nmZaqX1q0YPGngJgdUsttDdFJd9ivV6r62G5bHZ0syirxfIN6kTe2EcJdRQp3\niWUp+0enYKDZb9W2wv8Llvgi+pQ+Oh4XmTdoc7QSd27R36m6iCgcCKIrIn1i\ngaCmW+LKDiEyhh4EXRwZQ4bo1yBwA75gLXwEC6XGZ/Sw4D/siJvcaJZNW141\n118u5NXy7eC6m81fzrJyjkewU7ANaeEAROkYecjl71VRFBo/NoFqN3ERp2R0\neXU2R4p67fRg2fvOO3eN8uCXZypjKwFmlxZbvoYP6DRZks4H21Tb3t7lsDc8\n+2dMXoD4L/jV2kWurW2CsZN7ivi3+js8wlTmtZP7KmPOFJMR5gX5XX+ZuyLh\nw40PbZXO4NCGVvVTHSzN8G+HCnOedWukRan80iAjYJ+1IrBNJoQJcORHfWKq\nNMK4Eq9DqV66dW29sBAZKi0gS93ge1v5n88eBo7Abd+dbtd76gjf3qopDzdr\nbiMyVpMH7q79AL5ulwY94u5GuoFvv7yXH5W9IkvvO3nkgQu4U9hohMjD+D0g\nLjk/DX1klzw23qR4yLXfFMgpqfcA+IdWu9Pqz1uFfXHEBDsFOlzDBIDmFXyB\ntDH7\r\n=n1jZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqVp3C6tqqt7cr2lAnsPr+L2YMPOX8VZaIJk8PiiEd1gIgb8/oZnng29lrBoDtWmBh9eqenMS7or7e1ibrr74hEtM="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.33.0-rc.2_1540297683878_0.767142890669088"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.33.0-rc.3":{"name":"ipfs","version":"0.33.0-rc.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^15.1.0","buffer-loader":"~0.0.1","chai":"^4.1.2","delay":"^3.0.0","detect-node":"^2.0.3","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","eslint-plugin-react":"^7.10.0","execa":"~0.10.0","expose-loader":"~0.7.5","form-data":"^2.3.2","hat":"0.0.3","interface-ipfs-core":"~0.78.0","ipfsd-ctl":"~0.39.3","mocha":"^5.2.0","ncp":"^2.0.0","nexpect":"~0.5.0","pretty-bytes":"^5.1.0","qs":"^6.5.2","random-fs":"^1.0.3","rimraf":"^2.6.2","stream-to-promise":"^2.2.0","transform-loader":"~0.2.4"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.1.2","binary-querystring":"~0.1.2","bl":"^2.0.1","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.1.0","cids":"~0.5.3","debug":"^3.1.0","err-code":"^1.1.2","file-type":"^8.1.0","filesize":"^3.6.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.2","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.3","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.5.0","ipfs-api":"^24.0.0","ipfs-bitswap":"~0.20.3","ipfs-block":"~0.7.1","ipfs-block-service":"~0.14.0","ipfs-http-response":"~0.1.2","ipfs-mfs":"~0.4.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.24.0","ipfs-unixfs":"~0.1.15","ipfs-unixfs-engine":"~0.32.3","ipld":"~0.17.3","ipld-dag-cbor":"~0.12.1","ipld-dag-pb":"~0.14.6","ipns":"~0.2.0","is-ipfs":"~0.4.2","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.0","libp2p-bootstrap":"~0.9.3","libp2p-circuit":"~0.2.0","libp2p-crypto":"~0.13.0","libp2p-floodsub":"~0.15.0","libp2p-kad-dht":"~0.10.1","libp2p-keychain":"~0.3.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.0","libp2p-record":"~0.5.1","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.12.0","libp2p-webrtc-star":"~0.15.3","libp2p-websocket-star":"~0.8.1","libp2p-websockets":"~0.12.0","lodash":"^4.17.10","mafmt":"^6.0.0","mime-types":"^2.1.19","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.13","once":"^1.4.0","path-exists":"^3.0.0","peer-book":"~0.8.0","peer-id":"~0.11.0","peer-info":"~0.14.1","progress":"^2.0.0","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-defer":"~0.2.2","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.8","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","read-pkg-up":"^4.0.0","readable-stream":"2.3.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.1","temp":"~0.8.3","through2":"^2.0.3","update-notifier":"^2.5.0","yargs":"^12.0.1","yargs-parser":"^10.1.0","yargs-promise":"^1.1.0","prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"optionalDependencies":{"prom-client":"^11.1.1","prometheus-gc-stats":"~0.5.1"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"b9f2e881c59afe4eba15c7ca263d43bb59e3564f","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://ipn.io\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <br> <a href=\"https://waffle.io/ipfs/js-ipfs\"><img src=\"https://img.shields.io/badge/pm-waffle-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core/issues/55\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-Updates-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D5.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D8.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Waffle Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n- default Bootstrap is off, to enable it set `IPFS_BOOTSTRAP=1`\n\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-api](https://github.com/ipfs/js-ipfs-api).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [files](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.files.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesadd). Alias to `ipfs.add`.\n  - [`ipfs.files.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddpullstream)\n  - [`ipfs.files.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddreadablestream)\n  - [`ipfs.files.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescat). Alias to `ipfs.cat`.\n  - [`ipfs.files.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatpullstream)\n  - [`ipfs.files.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatreadablestream)\n  - [`ipfs.files.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesget). Alias to `ipfs.get`.\n  - [`ipfs.files.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetpullstream)\n  - [`ipfs.files.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n  - [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n    - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n    - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n    - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n    - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n    - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n    - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n    - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n    - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n    - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n    - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n    - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-api/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-api/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-api/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-api/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-api) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Core Architecture\n\n![](/img/core.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more. libp2p-ipfs-nodejs is used when running in Node.js and libp2p-ipfs-browser is used when running in the browser.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n  * Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n  * **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n  * Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n  * **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.33.0-rc.3","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-qWtchXsr/c7lSu5lN0OTCitJCg0ChJ4uwyeXW+nj/A5+5AtMyKsmFs9UzKWNJHXIadAO9g6eyPQG4xr/LufZuQ==","shasum":"f12def2c1ab3c1bcdfddba36407cc7a6da270206","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.33.0-rc.3.tgz","fileCount":226,"unpackedSize":25101837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0Cy5CRA9TVsSAnZWagAAdFUP/RvMJBW36BrRjf3KvtJl\n7sr0IkE0FKpWpMGAPxs5e8Oe6WnGtLu1MGoLflLIdtJi3GG3uhmOAtL95+EI\nk6nzAVNF7fqKEi0OuQOYk0SIdGkdteUCXpZGNIjBTHP4hZd25LtEm9f8rNVL\nk9dUzzkWwiYFTBXpZ9FG/vxir6MNzyl9767eprrQZL/MZgpJMgOIcZS7htnO\noKmd6BnIENWCWVvE/qYBvobChKLJa2ncFwiUhJyxElCrySQ1tE586hJqCVyN\nVIcfhuViFu5xba/6wS8QWBl3pNMTUziA/biH75TIfYTDs/7H2xKOsMlJANBz\nhw+c4uSATOe30zF5cIrDvo6MED0KXRDgOcAVaatPY6Uy0eN3gzY/zrnSchfu\nwox8VKtBwtlOyNnUIVYMHL5XZCkWue0w0MgzD1nPd+gO9Asu2USoWUs2iDUi\nN5hWwEOpuPzYkIKHHuSZZxk9ybDFaNiP4u8TEZ0+fgbqQoIoXrMLyHEzDb5N\nPyxiRc4a9BmFVahKYBKXgMZXAcgAHml8MYe5LiJcs/ClGXvapwUrLofWLDi7\ncnHMq+a/SK4nNc66yXK2ILVxcbqZYhWe9uxb7qTKt2DZN3xAhdybK9sZNE/Y\nFaL2VBqQgJSfwUuYoxCRZlfgkr4K94KeMFbMuvPmUNb40w27B7p2TSQfqWNX\nx+58\r\n=Ce+c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFc9MdUDDmKCfjab7csQfDijsZxVkVhdYmoE+n2e8v1tAiBczZhWW/bKOkLpPNFzeSF9RowffioLsE9LrouZi5m8Ww=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.33.0-rc.3_1540369592575_0.30068808797350677"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.33.0-rc.4":{"name":"ipfs","version":"0.33.0-rc.4","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.84.2","ipfsd-ctl":"~0.39.5","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.2.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.1.0","cids":"~0.5.5","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.4","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-api":"^26.1.0","ipfs-bitswap":"~0.21.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-response":"~0.2.0","ipfs-mfs":"~0.4.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.25.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.33.0","ipld":"~0.19.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.14.11","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-raw":"^2.0.1","ipld-zcash":"~0.1.6","ipns":"~0.3.0","is-ipfs":"~0.4.7","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.14.0","libp2p-kad-dht":"~0.10.6","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.2","libp2p-record":"~0.6.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.9.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.14","once":"^1.4.0","peer-book":"~0.8.0","peer-id":"~0.12.0","peer-info":"~0.14.1","progress":"^2.0.1","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-catch":"^1.0.0","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"3.0.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.8.3","update-notifier":"^2.5.0","yargs":"^12.0.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"}],"gitHead":"73da4ecc8592a11ea7c4bc2be744cfdd4eb832ec","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://ipn.io\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <br> <a href=\"https://waffle.io/ipfs/js-ipfs\"><img src=\"https://img.shields.io/badge/pm-waffle-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core/issues/55\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-Updates-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D5.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D8.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Waffle Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n- default Bootstrap is off, to enable it set `IPFS_BOOTSTRAP=1`\n\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-api](https://github.com/ipfs/js-ipfs-api).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [files](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.files.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesadd). Alias to `ipfs.add`.\n  - [`ipfs.files.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddpullstream)\n  - [`ipfs.files.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesaddreadablestream)\n  - [`ipfs.files.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescat). Alias to `ipfs.cat`.\n  - [`ipfs.files.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatpullstream)\n  - [`ipfs.files.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescatreadablestream)\n  - [`ipfs.files.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesget). Alias to `ipfs.get`.\n  - [`ipfs.files.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetpullstream)\n  - [`ipfs.files.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesgetreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n  - [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n    - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n    - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n    - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n    - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n    - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n    - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n    - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n    - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n    - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n    - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n    - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-api/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-api/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-api/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-api/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-api) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Core Architecture\n\n![](/img/core.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more. libp2p-ipfs-nodejs is used when running in Node.js and libp2p-ipfs-browser is used when running in the browser.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n  * Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n  * **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n  * Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n  * **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.33.0-rc.4","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-aZP2U7swSl2XHWT7v1qplh2mrEywBKv02Q9Z2ZrDXWDrgfoZ2LYJIqtE5BZ87ujGY353jsOYYrHBCioSNyzCDw==","shasum":"26c8755f79e3d14c661dad13ecf912b8b8d5f71c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.33.0-rc.4.tgz","fileCount":226,"unpackedSize":27429877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2vLxCRA9TVsSAnZWagAAb90P+QAAAfOJals4Gz6h8/uF\nbilhWHSAKk0b6k4psFYWfSl//jhRvWbD05rtI9VCgzgk0kzwnnyw6ShWO3QG\nLCHxtXetOedAO12ZpisGpG9Yc6X2dtZCqm4ITt1LX/0+22mZoWzlWzIkjXRu\nvLf8YfVOAzhVvjFg7doFrLfniDNVYtlht8Izyt3jkWYK9YL2nCfZN4T9CJIO\nCli6VIYtb4q6YnDg1ExnLhti9BTyaXELh+++Pui+D5VuabpckFW1sa4Pb1ze\nrBgftzb87B6Q8kTsdr1o51iEWRQiHQPtkGm8rTh1rjDC2KbJQvgKzvurBozu\nQrlF1xr5UE6X4wHmGCRTsrFkrdRuicHdYTYQrrE8fh+3zY/cw0pNMVQTYZid\nnIlr2oNndB48au7LAFa/FHUTGYX/w12CgFtQCSuyuteVHWLA3cmPFYpto7ms\nfgvJu5GQuAw8UsZ0DfQywOIL0ofeBQ0+8OvAr5DXTb4I5g09b+H3lktfIDZk\nUXtmAmb8HJ4bWbdY5BxrLRqjIqkgg/Gk1TxGfnYLH9IXKU12noc/ESND+Y+0\nh7GVUKQkC1aRNun/0I4qEs/uU1lDodBknvcpUQU8IBVDkrKLkSdj1EJuja0E\nDUat/F5cIcv2Q6qzHWo3x1hM6ble5ox+kzyqdLq1qnw8UquP7/DQtxte9mIl\nAA1h\r\n=GwbB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHh1fsjcfv/cXA8uIewQsiB5MGYZnUPZFM7I2ZtabH9FAiBhBMrOxPRanx9aBmuNxSIBHAYyUPaiIPilXDz6wjO3Kw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.33.0-rc.4_1541075696493_0.63883579345995"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.33.0":{"name":"ipfs","version":"0.33.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.84.2","ipfsd-ctl":"~0.39.5","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.2.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.1.0","cids":"~0.5.5","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.4","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-api":"^26.1.0","ipfs-bitswap":"~0.21.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-response":"~0.2.0","ipfs-mfs":"~0.4.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.25.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.33.0","ipld":"~0.19.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.14.11","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-raw":"^2.0.1","ipld-zcash":"~0.1.6","ipns":"~0.3.0","is-ipfs":"~0.4.7","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.14.0","libp2p-kad-dht":"~0.10.6","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.2","libp2p-record":"~0.6.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.9.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.14","once":"^1.4.0","peer-book":"~0.8.0","peer-id":"~0.12.0","peer-info":"~0.14.1","progress":"^2.0.1","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-catch":"^1.0.0","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"3.0.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.8.3","update-notifier":"^2.5.0","yargs":"^12.0.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"ad8b08d23b34fb7a83d35bf89792284fdbadf448","_id":"ipfs@0.33.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-gO7cB5OhVgiq+m4Adi/VhOnHZNBU/RThD3vDVBLyUucfFm0Mj+wmy8MZvG7+wljgg8NmQcVBd3wTDIu2OlSXPQ==","shasum":"ca736d5b33879e137ea7e033622b2e56d8f2135c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.33.0.tgz","fileCount":226,"unpackedSize":27434422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2xYpCRA9TVsSAnZWagAAX+cP/0asHrBGPs8OsdO7rS9d\n0CdnAqCphN6TxG+F/1CWHaQAnivtfCu21CuCHvbELqPvIitJ0zfkWevU2m9U\nlnSw7zklUdxaUrB7U/thZIdZ9DcydK93tF3upk9GXg4irS8prrqE/lpv64XJ\ngebn38guzPPKyeR+u1T+yipm9+LxgcrZZFYzgzx8wmYoiWdoUBo8MEOmbcZW\nILRBaIY/RkkqIb93wlw3tDhKOfXThS5FVaAxG8a3imraQS1yA8hzwn5wR2Ow\nrUd7hF+DqFz3+aEy6wyn1ESDNmppc1ZhRd1E010WVeo76t3/2o1vZk+aJDy/\nLGP3L8lFE42C+qZgVxYgqHMfSIquJKVfyKuaBZwn2AFbKiQy2B3F9ji99Rbg\n7RiSWZO9avvs8ZDw31Nhu0zrygve2fBvEG8ti+qULH8l//lWA8MJk6/wcsPk\npvh5Uq/HrrVfn9Kss2wMm4HD3g31n3QsVBQCIfJJNadVnof3UxE2IK/zHcq9\ntuEvtw03HtYQa1rQg9DS4c099yYPrLQEbrTulDdRojKfN7M6yqhCa2TcDayN\n2BlYmMzJuEFX7uD28IDtfZBHE2bTtHY6kXYiPWDgax8LgcYPmJfd7CeUiYQ6\npUHKjmVq1G9S1YgkTXQxXwDRlAtCqKL2D9Sal3zRflQDA1yylVi3SUGFOczG\nBCPz\r\n=kGPr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNJ/bmTatAk/pNmB0BLSCQCYL2AyNn30lJz4GMFUsY5AIhAPfRxGJR5eutNT1ajoO8XGSDDExIyRGv/vf+1SDJz7lT"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.33.0_1541084712386_0.4257430249982399"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.33.1":{"name":"ipfs","version":"0.33.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=6.0.0","npm":">=3.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.84.2","ipfsd-ctl":"~0.39.5","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.2.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.1.0","cids":"~0.5.5","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.4","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-api":"^26.1.0","ipfs-bitswap":"~0.21.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-response":"~0.2.0","ipfs-mfs":"~0.4.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.25.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.33.0","ipld":"~0.19.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.14.11","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-raw":"^2.0.1","ipld-zcash":"~0.1.6","ipns":"~0.3.0","is-ipfs":"~0.4.7","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^2.0.0","libp2p":"~0.23.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.14.0","libp2p-kad-dht":"~0.10.6","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.2","libp2p-record":"~0.6.0","libp2p-secio":"~0.10.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.9.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.5.0","multihashes":"~0.4.14","once":"^1.4.0","peer-book":"~0.8.0","peer-id":"~0.12.0","peer-info":"~0.14.1","progress":"^2.0.1","promisify-es6":"^1.0.3","pull-abortable":"^4.1.1","pull-catch":"^1.0.0","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"3.0.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.8.3","update-notifier":"^2.5.0","yargs":"^12.0.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"323b0dc55624b0732d006a3fc6bc7a7dc3d263d0","_id":"ipfs@0.33.1","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-He22aMi/qJYcao4zkh9fS1cZZWKPWIyO964j/Bt+DhEUVO79DBBGW+PuF3I8IfVE8ihDxImxNboal3pbZT9EdA==","shasum":"65e5299073b1c1e1323ceb7298b2bc0fffa3e707","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.33.1.tgz","fileCount":226,"unpackedSize":27458639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4Gw1CRA9TVsSAnZWagAAl7MP/1D7wsYniHuo9/uG5Lgb\njXlzPOipAHcCQqD57tA3QPmkT3vSUo9RYh0rvqYYNoXQ1n8LJ1x1CkxitUcA\nEZ3WuPZBMidFD3ATJxQrgQGLO10O4qsMjKG33gepdh7LJLOmiaNu1jFv6wT2\nrsvKh+/qAlZ2Ar4NZWpfCdvf3Cjhfh+g/2uQJZOqyaNrG7GQGwPE3T7n/RXv\nqg+97GxufFp6IJ1FSKjV7tdKukzaPizZtqtIaBG/YHch1XZfUDxptPK7xPyf\nAJ/FK2F+YM7W6OwFk/eBF6r4Zi8bCRol3hWxvEdSU1jhIvXe4gV+/jIoAStL\nNcb04SffmkrctPy7jE6RbjerM1DrQfahMnpdcLYMzM4qTePAIqcZqK3QKsV+\n4UcnN9lM7GxIZtbsZE5KGykAYxxbqqglsSE9ADiEAHjdgPwvBubpqzZFzYYl\njNoU5SX9Lhz6f6dbO2i4Amx3ZVxMKBZLJfLrVgSeP+70jCB/Byrn3894lX8z\nf/0CVxwr2MMhgRx6yUTEdAiNQ+BOCnlc3oOpGxB6+5LxAaoQsoRWi+bx0Ph1\nB06bSUzkuGgsgXtJdzIXA7lrKWD5Ffr7WIeNW5C4a3jBaHOx75mUy7JBmUqO\nRi+n4cozHQkAgbm4bDwf54AitFd8jio7Mq7JaHtPgeosq/5JbF95nuhTBXTQ\nfIXv\r\n=QIP8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5AHthXhAuNCQqt2WD8JHfovLVDrdwQpVtzO14/BC/HgIgHe59Izrg18DtGQLPtluTLTBCPT1gUCQBhSme3i3tcKM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.33.1_1541434420424_0.518333192017304"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.0-pre.0":{"name":"ipfs","version":"0.34.0-pre.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.90.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.2.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","deep-extend":"~0.6.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^5.0.4","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.21.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^27.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"0.25.2","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.2","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.4.3","is-ipfs":"~0.4.7","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^13.4.0","joi-browser":"^13.4.0","joi-multiaddr":"^3.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.14.1","libp2p-kad-dht":"~0.12.1","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.10.1","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.9.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^5.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","once":"^1.4.0","peer-book":"~0.8.0","peer-id":"~0.12.0","peer-info":"~0.14.1","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-catch":"^1.0.0","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-paramap":"^1.2.2","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pull-zip":"^2.0.1","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"3.0.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.8.3","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"34c8eb034be6ab5bd013e421da5dd2abc1e620ef","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/diasdavid)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-http-client/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-http-client/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.34.0-pre.0","_npmVersion":"6.4.1","_nodeVersion":"10.14.1","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-DRacuKvbkdwpc11xufmkiuzi9SLIB1d2a/kp87fbhB5ZOWUP06N8S7fYcxO7Mew5w4iHnFQa8NTGATHyB9Wb5g==","shasum":"c60fb7a4d5bb252fcf73e9338a3da6aa149e692e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.0-pre.0.tgz","fileCount":237,"unpackedSize":25778388,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCldoCRA9TVsSAnZWagAAXlQP/Rw3h2JjZNmBWdA9URgx\n58/Drpj3TZYM0cMu0ZpoTMhoSya3A66DxE2WRPsOipanq04jO+jHdWVQFAfz\nVzDzND/edihUD419uu8mPPEuivyO/yQe1cNm+OCp2jADL5GwyppWUGSSPpg5\nWOxCZV330uhg34kbqZHgnkI5fuRqPpAggeJluG1rvsml3tv+gbsLw6DERgIY\niMSKD+NCLhZq6kK8rnBvYlBW7S+xaS147f0GXDFYbNcWm4y1YF9YI3+xwgs5\nVIDAYdiUYUPrjbAYK/E6JEX5LV1FDXQrukBmGGk5GC8pOc13lEqz8KRL3In9\n1OoGZooZ1ulWZSaRC02ftxVJ3vL8bbXNEzotIPLtTpoKqs0csoCu2wxbO3dE\n4Fv6gAx4lh4zIXRJC8IHmEjQ7J5uQuJJMLUALlA255tqV7XZ88n57fQU0r7A\nSItX0fuzJFgcyhKUcpfbthlKKwcW/s2DP6zPti10jjrS3UdsgaK9AD77rZI0\nsvFcHYCV5e1bUfFPGJuWiDaiHgdgMJZEPMude0z5CAQ8OUdgHP54HiG9MPQW\nva7pXKt9jNkhGIILZW6XHHzS6ukloMulV+SUrCXNHOooP48PhHFbxnaxcF+S\n3I6WvEFfLWODTOD3J2GfwH5UDskR7qa0bBjnuTZHctkU+Bsmp/3XRqtsCKXp\nJKs/\r\n=8Vpk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+MZ/3Fna1vrTHmMIpivU1GNWYL1lWHlzhF+yRmXpTswIgG6fENfKHNpxMNZRzkbgMMOo2VZQdDOleTEdhWsY4IGA="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.0-pre.0_1544181607148_0.9154952681464126"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.0-rc.0":{"name":"ipfs","version":"0.34.0-rc.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.92.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","big.js":"^5.2.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.21.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^28.1.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.4.3","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^3.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.14.1","libp2p-kad-dht":"~0.12.1","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.10.1","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.10.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"3.0.6","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.8.3","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"70a8cfe878378951dcd480d5b9893f0338d7f6fc","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-http-client/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-http-client/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.34.0-rc.0","_npmVersion":"6.4.1","_nodeVersion":"10.14.2","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-EPeyCE050ZpZbSSR9j+t5nCKQxwGgGBIU46bgkkEb7JCdMJ1VsZOtq0IlJuOmNjSOyFWx+Q/406toSPkOVvHpA==","shasum":"f68c9ac75de6224ab7316b844fe8da8a866367fb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.0-rc.0.tgz","fileCount":259,"unpackedSize":27998527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGQOyCRA9TVsSAnZWagAA1nkQAIsOItKyVkTFf+OIfVsY\ngZm4CvNFg69jbTsvt2EtVx9azRfwNnSrEQqNBRzOV+GLuh3wwuoipxJ1Y8yI\nXWOdjMp1dEnRvJaHelKHvjpS9m0SXQKSQzWrRrFWxquJ0hzFdXCZ1SCvmz+C\n9w8uZVEmwl+p3E9mJQFxxxqlZvDFB+m8EmCrLl8WDMIJPi4TEUDMObDAz2vf\nEJGBvtrjh02hAMK1uDbhokEPprxEIll/ggwotX/C5B/6WOAaCFDodn7PXux0\niNLKcQClGOzg/wdonhxvtTeRfHaokH6PY7GMYEp8niwr8kHCtnWrmqEN22yn\ndoFd6X3PlJEuq5Kap9jxovOym1+eDgxsYN9A8FVtLFdIFH/Amh+Hx1jzEsu8\nnOS4W383NXGjf/klqqyG6DjOCU/k7UV7sYH9+6cEu64QA3bUjcmnmIRZR//J\n1Op/Y3/d1ZQT9l88mYfzkt8ald/eRPg+1x+hRMLbZo4Mg/7zDojHFguu6Yma\n2TUA/WK28jXwNi5AOflLEXkUPC8Ek/9XwjkknU0RYcBeXlwpQPuf2iXoytXT\n8XqCXuuH7L9k7kXi4joQqKFKWX8KUTNunqoZ+0bH6vy3p0i5txkMO27DpCHm\nWSsgRvNQ/U7Zu4LTNMiWOuxQkh4z5qxE1/akB4gNmppJC6iDwZrp+GpCR6tB\nsoti\r\n=8OnN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFs0q+8A16qH32FBBkcrps345+ZfCFJpC9Tr9AvygmLaAiEApYPQ4WW+fa5/giNnprGwfOnm3LhwZkavmh/8ZLy5gow="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.0-rc.0_1545143217769_0.8277241037774503"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.0-rc.1":{"name":"ipfs","version":"0.34.0-rc.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.1.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.10.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"4214ac01128c83ca0ae804636dc5cc3d494422cf","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** DHT (automatic content discovery) and Circuit Relay (pierce through NATs and dial between any node in the network) are two fundamental pieces that are not finalized yet. There are multiple applications that can be built without these two services but nevertheless they are fundamental to get that magic IPFS experience. If you want to track progress or contribute, please follow:\n\n- DHT: https://github.com/ipfs/js-ipfs/pull/856\n- ✅ Relay: https://github.com/ipfs/js-ipfs/pull/1063\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n- `dht` (boolean): Enable KadDHT. **This is currently not interoperable with `go-ipfs`.**\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- dht (not implemented yet)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-http-client/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-http-client/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.34.0-rc.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-js6ki0i4sxi6V4iRb4SY/wejRU7qdM/Sm62kPxcJzh35bIabSldpqC3x082T6+DjGDd1Tm0aAfTFAJ+FH3bKjw==","shasum":"0f050a1fe6dc660157428c2be123c049eb91f23a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.0-rc.1.tgz","fileCount":259,"unpackedSize":21468543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPdulCRA9TVsSAnZWagAA0fwQAJUp4GYX3r76OTWDkrNn\nrj3ihtg/A7+yseJpwDwceW6I5YgCabiIEmrvChqhZ2FZIzlS+nhTpHHJi/zH\nuq7opJk/svff4FB72EagxCazq8OsbeyDMjk4sPkKOQ1rpJd0r0y93ZgS8R/P\n1aO0/9dnQmMz2lyHtMxelqf5emkvD9a8srNgYraUCP9R/FIulPXv/7NydXZN\nh7X6QGNCITGDDBSyYLwrc6FmGAswFzpGQwfOaLULwpxWrGT6WY/4EI6HReku\nGvrqVmp2CLVdvEDHGi9F0JurMLeZ0276f9O5/xv+7WB/3/869+oZOhdnU3wU\nQB865TTXHTxtkyKr3vWv+Q2R9UWGE3z8y5hyuQmke2EQAv+Yw6M2tXYcENLO\nCUCwCsL1qKDpiNo7VEwhluHTvzcuODvHuNs4ZNYxciljfg6VvyDxMF+YcJ3j\njHcMTJFphaxgs1iBuRSIsq4G/6sMm5bZInRApyf2Xivrb94NXH+Svgkuu3It\nrVDGdwg2lRVZXi8zMQfPwdcqGufASEjxb8C8rB8oHOb9y72msHT0SDzW+NHt\nkxWehpF3RLkbo9Vp07rUwavrItC3mMZ64PIEdfWcquof+k/d/jE00+nHqRG9\n5Ql5U9mWAe17yFTNPhukQ4JMuPL6g6n5Er3E7orSMijPXFu4InJb3BEzcQxt\nIQRe\r\n=4FJN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuSnUj/DoyL9XkQ7bpWu7NyO5u44UTXe54XrXYfT6sSgIhAML+deyGxoWAyZq3xecLHu3xOAL3u66m5T3kub6UoK87"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.0-rc.1_1547557797148_0.1663323344005445"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.0":{"name":"ipfs","version":"0.34.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.1.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.10.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"0ddfb8ec0fc3de899397a5c85a2fe8ab642778ab","_id":"ipfs@0.34.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-NYjBYHcXTEyHKIeaX7Qkn/t+7HuKIV0rJ1m/ZttZbSsGaQJkxWn8BC7Ly9yOqQARVMtpM8jvgV/eo68TY1mibQ==","shasum":"3337d2de07e897d2e9e8e137947fac0d2e2633c8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.0.tgz","fileCount":259,"unpackedSize":21468636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQF3PCRA9TVsSAnZWagAAIc8P/injFYqkQi3U8kLxXy8v\nYTOyGzTnkZZvQ+8l3H4dCRqVCIWrToQLHH5nQ34xyU0Fk0O5lGcGKScUk+9p\nQpNeWQgULs+3BkviW21VVtRR56mgyDNF7JtVba6pLn3QYKZNehDclno1btF9\n9p3/hX9wkq+BpuZuWgWuSnMikro/gVWdzFo8ccp85JCk5bRlwjZCC3vyb/WJ\n1DMi7LkLITYlfaUbGSQCFUxUvGZK8jwRp8WP7HJbaB0lm/ka01/XPJNcgm0H\nawkI4uxoRnUqumzIQFS6httSeV2CTrmtwkLTtPcKE05caPXzyf9/0CZqrQ0s\n0nwxPNKnWGsLOhdOIo3HUe8QaWu6mJ0RpBX3RxJmWfpRcGvMAgixKGif3Gjz\n6DkN4ia0+ZtjHPHL+/RQGti2ssWtXc4bRMypBFkw4hAYGpDbNb6g+SQE/wpL\nUPPyoq07LmU1INcgMa8L7THs/oHVPIN0Is9Er2mGXgCnacD72wbMUnDOPpZN\n/kCDkpRizcNJv/pPyEGOahm+5dh1QkOOm1RETO7be5l3P9IFIPdkqm7u7rDz\naGsNw11TR8eRpqVN3Urhm1cO0ZMcPkYMVFi6P4skXZ+sqhxSbfzTmuQA4twr\nbhw/YZ+n0rm2RXtKvLNikz1IxmlRLVJXDj5+9IMxVKkJYgDCqHXRzU4iqiBO\nByy8\r\n=5HG4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByzJOTGTUehrjDLg/AwUDaQ/odSX+HUPBV+j5wyE3GPAiBw7B99W1S4QB5WP5no2ttpagKW/ji9Dwk1n29Dd77LKA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.0_1547722190570_0.5732862058547885"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.1":{"name":"ipfs","version":"0.34.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.1.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star":"~0.10.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"00cb494f211f12864ff8cb3ff8f190fedc905a3e","_id":"ipfs@0.34.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-9FMK4YeIfaRKCVRZGjwcAF8I3CZbO4vLqe2nFjJ6rWUa6q8I2Dl20P0QrxewLUucR9Tp8UpSgTa+RiF4Nu3ckQ==","shasum":"f7c082494feab06613b5992a6f86e42ac97115b3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.1.tgz","fileCount":259,"unpackedSize":21574504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcRbgACRA9TVsSAnZWagAAySgQAKPKd/IgAzkgU+x5QqsW\nq4gJmy9/yGFmz986DOoA55vgrjDTnu7Ngyi0R4/+4w/9nSkAM8JO+38JRTdv\nxzLAPu2j6fAyQNJSUiuDzKnq3SjAGhEb1/ZI5qWTKb5Bh23atU4vuIAGUyQb\nD2efxEzmSji9MFatUTfZZImIV9TJrPd+aAoDqYteJJKDh2xqi5dxUARixncb\nUmjm/k/gRmpVs3FoWYtAv1zkq/KIrijpqhoQBdV0bp7y5//GAInVm+mLPAop\nLyDG9jJHF8txckMM3ziOgcQ4vhkol++Lz65JhQ4ozJnDo6urVwONLmJjrCLC\ngD4EIJqELBKF+Z040e0pJg9S+FQb3g896QrLwHWJaUlgqTmB0XsSQlf7CU+I\n0ju6RdRcN1e7C2r/jrS8B2sqSzZfF3oOk4jMxe89eY8huYWI8OJrWLzpQ+21\nFJ3m+LP99JpIZxlrkNEY7Aj0qQdHmk+v5OX8TiRPvvaJORU1bWco56ifwIz6\n4XCmL9ou40OxHkm/nCpcTJ/xtBZ0rrkx7hMepSJg5zvWvwc9TFx6mLQKei6y\nG6Z/UCL19uyBxFsgOXrMGZIrTpHenhrenYvrCe+8CkEkuVpt127dHk1K/XZp\ny038NZEkL5OSfdh5TuU6qV84FKpWurI5eUT2HtkIYtv2nHOrgwAJ4xmZKjbL\njaXR\r\n=9V0w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtHlAhCb8DK432oaeY0i9w6Nb3d9GnQy+hJFdXWrMiFwIhAI+WtRiYiW77YWkiqv5yo8BBgVfyRsP+rMmV3vK9VcLF"}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.1_1548072958795_0.5181480426500948"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.2":{"name":"ipfs","version":"0.34.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^17.1.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"076f645496b9cc1782e1b1892d241dbe4a17b9ad","_id":"ipfs@0.34.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-s+KsGGbTw24/ORFSY/ky7zlcYzWXgzIYrMuZllzSSkEYmtEoxVYpDFJQRfi+w9GSAJ1Ebu0EL987KMh0GvSGYA==","shasum":"fb5214039b3b7379a282ef1df5e111b8c08bd01f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.2.tgz","fileCount":259,"unpackedSize":24787697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcResJCRA9TVsSAnZWagAAriwP/1zDU6L/qYrz6fsnH1S8\nHN8T5ZwMPYvbJxkkORPIxXrIogaW3/Hy74Cjz7O5SPzJrORakRJ8gSHAxGt4\n4NsjgzeMSd1wQElNWKSsAED7E4z/YOfDahDSN6v7pmaNTajEJqL5ABGkkAvC\n59JYZOi8rpso5/EbzW3BTkHoLwOG1GmduZU23LHzfqu2GZq3LIicF5+IQGuI\nlCqjvT9mYdVOnJdNuMQgWayhydxbbq8RUnf7yQ1/63OoaY9bFPdGnevlz0u4\n+CLFpkVzfBtLVG9MyNXKxLbREfDCdtMUz8HmpVzu/bSi8uQ8JaU34DADRMLC\npfHWr08btmkyQAByGC9/bXQKPfHBNlMicLFsaOwipubCAi8dWYst0tTgs8S2\nAOE6X6h9c4GMggnjjeBdCKCPDOyaTadivVn6eNdeevn3mfDGwRx22LgJvuPt\nPG8RAN+zvxE+9TkCNTQvVqEFlez+EN0fVoIH1wQj7lbnQyjbdS2RGW5REZub\nf9Orgv0IKeeeerl3+c0+b2On/ODP2+EA2mLo6qVV7nNKba5N0xhwcq8Dpves\njHZDT9RrC341I50c4IIgqAwhZcb62ol5zajiiqQwCrAYUtGM6DExSTJho58u\nF4Ien0eO8k4SqkNct8JI2/sCeWnasIRUp8i6pEkbsvJf1mp50K38bbaElAEx\nIozM\r\n=p3h5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIESodw2qKh/Ll8QGZXzj95eOe++apapnF+MrlsDCmrbeAiEAnV2z2BrPXLCcVbly92IMLnJ++h0oWW1Q/yIGsVsZsKo="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.2_1548086024324_0.44307437345524736"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.3":{"name":"ipfs","version":"0.34.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.0.3","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"2df45d7cf25d94cca56242a3b6b090c3110b03f6","_id":"ipfs@0.34.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-vHhvfpqJS6HCIKXValwtEJZvmRBogrG6s863MwUGaNvQshHWDaNFotTpnxQP5FI84uVyoxBCQWhRZAEIXKhpsg==","shasum":"a722a91d8f8f871a096fdfaf5af1dbe0e1a1b713","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.3.tgz","fileCount":259,"unpackedSize":29201146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSYUlCRA9TVsSAnZWagAAvkMP/2n57ek6QsMHZi9x4MOE\nT4L5E5C7BKUIS4ExG66BXFfZ0Br2i/dV8KRfg+0VeXpdyXCfVpv77YcV8Ybq\nZXDyZaFpUzBNMh3Nwp8WgiKuKH0mja+3jcnqunNaZLGt7I+spQuE+cfJKOIL\nSEacD0alG0v0wFP8E+vCnrYgvKzG2eFT6zAZ6fuDhWt2uU4pGKukdKDpp3cA\n9EX4uYtCU0V4V7rf73pCvIMa5TZpt17H9A5nswsIg0iJmlhT4b4RnCuVnUGA\nAFdBSZpeRI1DJAaiGznYlFWetegSlMS5eRlGOBoMeUgc2WCqchz8MCszLupy\nhDpTW8ktVMqLQbRhNeuZgqZvNVPoy9FjHuKygknGjEWEUpQ7Onl+mKga/8zx\n8Y9cagIqKzNSqwcowA28QU389PBoyZyozhxN9NXVZPFEFtNvrragL54+bpRN\nR/kv27wNSln3b+LXxh8PK8jW5Q97wll73cYmPnxl/Sp+wN85UpgEKEmnkouk\n2B8n43ZlE50a17Zg+PdDoVivx9WTAeklhDdD9YZ17/DMFR7YXdwbQiVKuMZi\nO8NvbZ+UGY+q2K+aoAI5Cht2lmcI5coINLF/pV4GVns3PMEXPLXLzs706oJd\nmgA+bzrZe7PsAhgHbVyn30NkhpFWN5cIyWZZ93dzmxCyeO7ezjBfvgwh3krF\nhRbl\r\n=qt7C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/LVCS3NhIAocHlhrwVfQfBUhZKmD8+ghz2+x29e4+9AiEA+x9vEnAWALiQtp4rJ0/dAnyCVANTQUMKBpkrNtwnbKg="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.3_1548322084562_0.7149893134850003"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.34.4":{"name":"ipfs","version":"0.34.4","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.0.3","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.40.1","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^16.6.2","hapi-set-header":"^1.0.2","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.8.0","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.20.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.24.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.0","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","read-pkg-up":"^4.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^1.6.2","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"2b3bdc3fc370198134f290d5f725669f3d38b864","_id":"ipfs@0.34.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"dist":{"integrity":"sha512-BhNVdWRE9lP+D/DfAI4L3rtIFg3trxpkEbCELBA7+mLi5ZkVnNpsOvvlcn3eJdufwqBj0/9x2xbOP1YQzZfEKg==","shasum":"325705ae17ebb606d7d9cb2223c7606a806c6085","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.34.4.tgz","fileCount":259,"unpackedSize":29198573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSfSlCRA9TVsSAnZWagAAvgkP/2nYzu7qFE2ykhGOYjvE\ngvxKZyQoWms2jtQ0FWod4DjnNVCXyURr1PhxNmRv1YGIRuDpItFUbHEGWaRs\n3Ztv88Vy3uOGiZ6TqYObkL4aHjki1qaU6/Z6kTQtqQeHkc6g1I2mTWRwjpq/\nAuGfQPsWM7nu7qlS3saHmg3h4eep8ESBhBys+6WbRQvNGxE9wJnqcl1nvKr1\n3qTWVcp/uB1uyM/09AoP5Emnc92j/mTbkwNwT9CBXZ195SGVCmT7jaS1Vs/C\nx4wy1kqWIyJMY/v35NdhH4aVoUHwKFd7cNe8yHsZvlZKeJ8bJROvrvX4jYoW\nISP2jE4ZKollMERr2uzetJIZll0PaBx1DywJUQ7i4Je+sAir67qtaIjhBnSh\nJHjO/1sHvy73dnH+pyfPGQhfF/PvYvKCQ3yq7iqPIHs1LsM4v9cjknIFlPfe\nDg8Lq6U3Xem+3VS476YyfafLUWHd8x4t1pTIIeklHp9UiUcB+yBCo86MraEu\nEmiBASuuI6yRSwZIwsZnOwD2rX0hqfsLF4Fg2a6cGYeUt3KI4MR9ge6wadLY\nnQ5mmn6mNbrpLo80dzBXsFqvnEGfmgNvAi2BH7sCuJ6gHNmN6xAvsmy6nJ3k\nGVll0OIzMuaYkpAVryYT/l35CG+CnTWYVJRFMlS/b89ttwunEu/LrJ82MQyN\nm63n\r\n=j0Mz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIADxh+ImOSRYSev5IfRyH1xqoD/vTPg4ql5g9W5i+X/MAiEAgJXXjtLUN+efhJ5qfYC103tnzBkDcgqZpGd7uwUPl5s="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.34.4_1548350628039_0.9236015979075456"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-pre.0":{"name":"ipfs","version":"0.35.0-pre.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser","coverage":"aegir coverage","coverage-publish":"aegir-coverage publish","dep-check":"npx dependency-check package.json './test/**/*.js' './src/**/*.js'"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.0.3","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.96.0","ipfsd-ctl":"~0.41.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.9.1","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.25.0-rc.0","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.4","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.0","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"e30600bf893abc761c08ee532ae80e290ffacd0b","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://ci.ipfs.team/job/ipfs/job/js-ipfs/job/master/\"><img src=\"https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs/master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n      - [Domain data types](#domain-data-types)\n      - [Util](#util)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install run\n\n```bash\n> npm install ipfs --save\n```\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on OSX & Linux, expected to work on Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Domain data types\n\nA set of data types are exposed directly from the IPFS instance under `ipfs.types`. That way you're not required to import/require the following.\n\n- [`ipfs.types.Buffer`](https://www.npmjs.com/package/buffer)\n- [`ipfs.types.PeerId`](https://github.com/libp2p/js-peer-id)\n- [`ipfs.types.PeerInfo`](https://github.com/libp2p/js-peer-info)\n- [`ipfs.types.multiaddr`](https://github.com/multiformats/js-multiaddr)\n- [`ipfs.types.multibase`](https://github.com/multiformats/js-multibase)\n- [`ipfs.types.multihash`](https://github.com/multiformats/js-multihash)\n- [`ipfs.types.CID`](https://github.com/ipld/js-cid)\n- [`ipfs.types.dagPB`](https://github.com/ipld/js-ipld-dag-pb)\n- [`ipfs.types.dagCBOR`](https://github.com/ipld/js-ipld-dag-cbor)\n\n#### Util\n\nA set of utils are exposed directly from the IPFS instance under `ipfs.util`. That way you're not required to import/require the following:\n\n- [`ipfs.util.crypto`](https://github.com/libp2p/js-libp2p-crypto)\n- [`ipfs.util.isIPFS`](https://github.com/ipfs-shipyard/is-ipfs)\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-http-client/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-http-client/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-pre.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-2LeR1HGD6jJFYFjQf69DhDmIiQUcGe/kdLycYJEJZk/PrE8wnP9LcHcP8BJjFwHbZLF/v9z98EL/yyIg0AGSbg==","shasum":"98b84cec584560e59a4a79b01ff4e95efcddb73a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-pre.0.tgz","fileCount":268,"unpackedSize":29782007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYYb3CRA9TVsSAnZWagAAq6kP/iNnfRg4ZA91zU0772n/\nVDSmh7Ot00PqkEkIJLVLLoNjyGbxS5wfDN30anO34bamnnli1d085bajxLFM\nBRXvmQ/qHnYa3m+eVgb2asgE4X98mj8vNy+1fMm4FavWeCX408ePTh0I3wDt\nj5vYBJZn9X/k1GGIsdX1UaF8chyVp+vpbAivEVwA8EXAuIST9ZR4ru1lWeaN\nmAlENL2mCV2cfAJwxYPSo9u/wJgc3hMMu8tmODpQQ1AM1zjzoZUqayP94MXZ\n0xeO/P5EamZ0BBZpIotzT2IjVJ3eZr/koAwXEKw4pTGrOwk9tGW8LWmXBCIB\ngFNnyQBCEl/ZAXAGXGRbJH2fttZbgTSqwhxi8tFsLYQ8UsMEV+IPlG8ebnMJ\n/5RQsR1jJlvmetQJU7tCpurlpHP9bTbE3V1chbP+3sDgXjtid/KM9PthdaNT\nmyY2zDq/kqp4hxvuDMy5Tu4Zrb9xVumhjv7GLrBrcmpAiJ+jwGnv7jyQ8o1Z\nO//Ea8i01H/NfdufrCxfyHPicdA9n0h0sA3FkFGBU2KL7QDEYFZPbJRy/dXE\nQa9gAiTxMJCVeTmdkkDMWbN6bd49riTOO0hTzvCa4bANLZwOHWg0bPrPSj26\n9rG+4FFhTha1Yrd+usaPvuX1FWZQOmImjmbQ5XYkt0vsaQgxvkDCLMOBERgE\nn5uJ\r\n=w6gr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmg0CAzNnoeJjZEjDalz76pfaeAKd4H0HjuTQf69thnAiAtp2QinFMVAvfxGTyaermm93Yc9x57xXvTn9VEcbLVDg=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-pre.0_1549895414932_0.9031719627669983"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.0":{"name":"ipfs","version":"0.35.0-rc.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.97.1","ipfsd-ctl":"~0.41.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^2.1.2","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.5","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.22.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^29.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.9.1","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-engine":"~0.35.3","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.0","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.2","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.4.8","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.25.0-rc.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.7","libp2p-keychain":"~0.3.3","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^12.0.5","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"87893a69d9437cb1c6906aae1cbada3e365dc1f4","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihash)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld/master)](https://ci.ipfs.team/job/ipld/job/js-ipld/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-pb/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-pb/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipld/js-ipld-dag-cbor/master)](https://ci.ipfs.team/job/ipld/job/js-ipld-dag-cbor/job/master/) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-repo/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-repo/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block-service/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block-service/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | N/A |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-circuit/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-circuit/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-kad-dht/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-kad-dht/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-mdns/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-mdns/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | N/A |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-railing`](//github.com/libp2p/js-libp2p-railing) | [![npm](https://img.shields.io/npm/v/libp2p-railing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-railing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-railing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-railing) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-railing/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-railing) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-tcp/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-tcp/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-webrtc-star/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-webrtc-star/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | N/A |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-block/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-block/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | N/A |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | N/A | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-id/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-id/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-peer-info/master)](https://ci.ipfs.team/job/libp2p/job/js-peer-info/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multiaddr/master)](https://ci.ipfs.team/job/multiformats/job/js-multiaddr/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | N/A |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihash/master)](https://ci.ipfs.team/job/multiformats/job/js-multihash/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=libp2p/js-libp2p-crypto/master)](https://ci.ipfs.team/job/libp2p/job/js-libp2p-crypto/job/master/) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | N/A | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/js-ipfs-http-client/master)](https://ci.ipfs.team/job/ipfs/job/js-ipfs-http-client/job/master/) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/ipfs-multipart) | N/A | [![codecov](https://codecov.io/gh/ipfs/ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=ipfs/is-ipfs/master)](https://ci.ipfs.team/job/ipfs/job/is-ipfs/job/master/) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-multihashing/master)](https://ci.ipfs.team/job/multiformats/job/js-multihashing/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | N/A |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![jenkins](https://ci.ipfs.team/buildStatus/icon?job=multiformats/js-mafmt/master)](https://ci.ipfs.team/job/multiformats/job/js-mafmt/job/master/) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.0","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-esQoEiLWBekKt2us7hwZZegoH/Ew0B351qAGqmYd6k7TdK+p29LnC1ZKDYkSfjUvXDXi+oDdztIzDAgLY8QlmA==","shasum":"e4c2de16b46eafe3b44c03677340a534b7ca8264","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.0.tgz","fileCount":269,"unpackedSize":29891348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcf8I+CRA9TVsSAnZWagAAP0UP/iqa9Idi0FN92JT3PIIk\nci+MfikLSY+1uV3t+pyRKMgvOF5BjVFsD1CaJEdNEVOM5sdxd21gCpi7V8bL\nGLOHjYSrCjaVmnlS+Z4nU4J+XsI0MBIdtUZfgA/kx5P7OKFE0kLT5nj6r8Sl\nVjj4y0LgEbVgJhvHBS0XLKnPCIU3f87m/lJHtfyenhJjSIKnN9EKczQ6zgi9\ncisrTt0PND/Oc3eTZBOUEXRbIbb/eZalEdF6q0as4Umo3mpWhBwkL11zfc2t\nxiSvFMWejHT8leMkCIgEOCaBYkQfStZN9O76nmzFiT+C+D1y0lXw5WyCSPMR\nQwNqoltSdOlZkAIYsaQO/4EF0Kh25NkjYk5LXnfA7cOT4qEAQIjF4aMEGbnw\n6vNmECHdyBbX0nTSMW6PTdTRRVn0mnvetfF4+HhlSYxbKjqH3zuYD4OpO8kC\nh9GiZfUvUlArlfqz/jP5Z3TOVQCG7NV0uag4QVflDRvfLTaIA4uVk8I+w7E+\nnHcOHrn7NJrS52b/Z+JcmlO6n+mm8CRCQzpucn14W5qKTEsyHmg4IC3mLsTN\nMnXe6PNIwu5cPkwONaH4V3lXOgwRnxltXeT5sgEyQHlqeFV0oQAG7pPIHC2s\n5czdYFA9LfIuPI/i18g6p1iSz0DvJ+cb6iO6FR00nWP4JwRwRcsAw6dJwzkv\neHoU\r\n=BZyi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyspxLZpfVuEfVnAzJT2XuaoyvLD1dfQq+uguqwLD1TgIhAJW/th7X7MUqqtih1EcijI/hFJYTwSugk+eoKSl/lmdX"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.0_1551876669288_0.3065918209466958"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.1":{"name":"ipfs","version":"0.35.0-rc.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.3","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.25.0-rc.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.8","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"github:pull-stream/stream-to-pull-stream#fix/remove-unused-destroy","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"971af2bcbbf6314a6a07b75d1bccdc4419ca2bee","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: false, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `false`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT\n        - `enabled` (boolean): whether the DHT is enabled or not (default `true` in Node.js and `false` in the browser)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihash)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.1","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-yP55OJdGEGRoNdnwZOrBhccAGPqgKryUFp47iROIjVy/gXhrdalreEwf4frC8wHWSJ6PyTuJqzVttfLOrY4bHQ==","shasum":"c330a254625433badd2bed84f52c7a2a39a23383","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.1.tgz","fileCount":271,"unpackedSize":28453280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcknBhCRA9TVsSAnZWagAAALoQAJfMBzPYY8C376vxGzXb\nSXd4FVbxvb07eCPeYwJO2mt3dIl/CsPNtI7BYcK0tgaEqnBiT0s+lm1ipEaT\nZ6i7ceX2wYxfdqhOX+3ZVlmHSIaS64PKl75oNs2qKI7MER8kgAKbyLC78cTp\ndIOSeh7ZmRB/xsH0WtWcZAMXRIvAnEwWdAk7j3U6tEK1ugspzRatQOTGL7G0\nDwOmGhypbTAN73O9uCkneElBbLn4q+Nc9AsLcmYYbsEiEQN3COvR86jsPTT3\nayomrq12KYE4YHpFfNVIBXmTj/axeyN4iYwdhIPXqZtKU9uqkPCJHkebcwGo\nudJUbiErn/wt+mQgFNZMNOoJSom2WTJwR9oyaRVwXroXbtTD2MOt7fC8Hj5m\n4akf95lsXC1XZfHUoNUlT9bwUY8pMhFT4TSBSWP/75HJ4fbb56Kp33axmykr\nvTpwZo4q7Ai1JZRgJpLAA5f56qNgCnWykc/9cXEngO/tQoqrNGcPYubWZgNO\nlYD8vvgW31dhtPeKBQ+P7eGbjj9JYRTQMhElPn+IQqFIVvNQ4wtDQ0KclTQk\nj32Q8BqtF4kEACnEL7PZaybN5GjlCCf8sF4hw3ALcw1QsaBBFXIS85vVes/0\ncUPSzkU0sO3hj8TW39Zrb7kROW/t4vThnoo3N+Mz5bMj/jSvR65e6zG+cohW\nSnbV\r\n=jkvA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEYTk9PzWrct8mUjx+UD4fdfjjey+Dx9Wyvzm25EfJGKAiAzSEpDwaBvpjP1oSgt7z0+gq7iuJIhZJpyrNRjFlrxHA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.1_1553100896127_0.4211824741817096"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.2":{"name":"ipfs","version":"0.35.0-rc.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.3","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.25.0-rc.5","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.8","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"3b91ea173498c34b4552df9b12ff791cfba99b17","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT\n        - `enabled` (boolean): whether the DHT is enabled or not (default `true` in Node.js and `false` in the browser)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihash)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.2","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-YiYz4dcw+MqbholbDLO6qHj7GXZ0ayLQPFS6YsVbrYdvpnxFqggj7OjcklMiDPg9UYo7MwD9TKUyGwCMYaXY2w==","shasum":"a1e38da78976dbebb0e9d7c2ce9779800f8e90e8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.2.tgz","fileCount":271,"unpackedSize":28493968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJck/A1CRA9TVsSAnZWagAA+o0P/27G9am+kS6GtzbgZKXC\nFS0RrLMMvyailnvjTKqQg3SQiytyisYdqMQ72yzboPBJr90reNxXmWDj75g3\nATKZzSvg8boPPxsMLRiZJmGKtapB1PAM/Fd2zIAxo6RCNyYLjluPHwaG7zBe\nYweu+vAdHmNkrqRACjcQjsLK+y44T2TfAiKAP9akMPpJMQX12+cD+ZiyLy6Y\nFaGTFem/aqEuXQZlawdt6FMa3VCwRjy439lnUSJsdN8cd+6NEko3n+LX73kZ\nazRcNKfeWJJJD0Lxwb5SjHrXGgp2KnRBiFAO2Ue+smbTzEuyNiGb0Feguvfl\nJMmeti/a/F238MfnhpPWU6+mP1VmnHuT65TWnGOXbJBc63oT6Rwi0wp/L90P\n1CvH846sre6K/nqqj5pznQVR8O7vPzNI3EdQbQad96mWWhCrn3pr+IWC8EyQ\nKnG1tWN9HcWV2yQlVdbmCnn2fYEZe5EZkLwG9qzHIxd/jpsij820vXfLiBqW\nq+wrobhoTFdq+iUhL3ho4WbI7iCRa7XQOBnnLb9Rx2Dl5+4lwDLbfj0mzTA9\nub/Xb23u2kndng9qVGSdQoizcyMMH/misd8zZsVqyhpwmx4JaKJHoV6R+CjD\nsn1MmI8A1wuovX7HZGXudgw6OvjF69c8LWlgSTBtG+gbcWqxIUeIdTjC9SBL\nSo1B\r\n=v0gS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+Pmj5X3+YD4LJvASsl/cVnLlwsuSgp+4UXmCT9+uxwAiAFJGwzxIuezPPDPTymveZobsH65ZafwZNC9yWCJi7qIA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.2_1553199157048_0.4340535666854022"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.3":{"name":"ipfs","version":"0.35.0-rc.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.1.1","stream-to-promise":"^2.2.0"},"dependencies":{"@nodeutils/defaults-deep":"^1.1.0","async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","hoek":"^6.1.2","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.0.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.2.3","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","joi":"^14.3.0","joi-browser":"^13.4.0","joi-multiaddr":"^4.0.0","libp2p":"~0.25.0-rc.5","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.8","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","once":"^1.4.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pump":"^3.0.0","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"66d6c4267ced6efb2fc3e2d0a6552dde0516a415","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT\n        - `enabled` (boolean): whether the DHT is enabled or not (default `true` in Node.js and `false` in the browser)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihash)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.3","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-cqdlfqM2R8uisMhEeKNJg13HW+L790WZiR25EBFUDL/hnOaEuCp6dqeHQKICUWCs77Zk3Mpgzf5ouVuPNry4IQ==","shasum":"6d56d0f62df9b2cc6cb02f34a41e20f0ebf40164","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.3.tgz","fileCount":271,"unpackedSize":28494325,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclA2dCRA9TVsSAnZWagAAE44P/RqD//VsQQ+WdvFfGWga\ngv6c1IFETMAwktA/aXFUI9VfG+ZDCIr7SQ5dHWp1NgDE98zwqA3yT9vxfWBo\nhFBxJiEP+/LVuJpDFdkZvDzYWIrqqpyv1GBVMLVK7py7EKM2ce86qNfF6We3\n0fE6tSSZ5/XV1D3zXLCOVSm1ZrFLzwtQwP6+VdssZI39fJnOd0d6t0Fv9Vz/\n12ZYENJZxgk0R4oROtnehFxtHSdigAob8+lE0nmaqECi3z51vSzzH9QWKWyw\nvWMuB1ct1er7+OpFU7uPmuNDAzm7kJyT98isJ3ykUw6niKx+R/dXv2pG+rl0\nfuCU1zWos54Y40QBRoq8j61ONWribZqnDGVUqGcTZ+9L++xfQn0gcquViIUM\njUYTSPuepawez3xlsHBp52eO3mmlq97nKgioCmRSA1DivSHSr4fIEbsEKYYm\nPdzMLqoFi5qRiUCGqNcsBquMqXfaAvwWawaHneRbCg4WejS48D5mVH4OOh2L\nNluLgtyDbEoelxUyClwUjwTiifxOgInHLjn4a8SQSQ8TDbJ2g7r97pA3rS/H\nCqoTMr1q6dpxVK9QeCLFQy38zY/bUp/Q4/9MeRYRQqp5QC4izltHVhvfmDBl\n04TJgYoOc1I5H0Uz4VxHLczI2ACY4+fhFYzHwsfOt9XVOtsHjzDEhRLquWbT\n5nfF\r\n=bd9W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEA1fDcd/8r9QRWKfN7DC09GnNqM/Dr61239adwM4AEAiAQlWg+g+17oB6g26EOivlL7F1cHA/IP4Bf8T5zOu8xGA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.3_1553206684708_0.2918141838642472"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.4":{"name":"ipfs","version":"0.35.0-rc.4","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.1.1","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.3.0","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","iso-url":"~0.4.6","joi":"^14.3.0","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","libp2p":"~0.25.0-rc.5","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.11","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"24e1b55a41459efc060dd64d84a521f385bad6ec","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/pm/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT\n        - `enabled` (boolean): whether the DHT is enabled or not (default `true` in Node.js and `false` in the browser)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihash)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.4","_nodeVersion":"11.11.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-3f6WCH+gCF6nih9iz2Urb3B8EzuzxP8mmlmjYPklvvmtq1JoQWowk7xx9Pq+eP8ra3xdu3qEY2HObfDRFbHStw==","shasum":"1e860f482d00d9002de5e2d366dc5555f5eda326","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.4.tgz","fileCount":272,"unpackedSize":24945863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnVI7CRA9TVsSAnZWagAApOQQAJOnrF0wLNyHm+M71fek\nrvGguk63zf96BX9B/4Z69ZwmPVF60waSl9T4i+cLjfQ9V+Cmct8jl21x0FyF\n18OTK/jzNFwKZRjdc+0mf+GCoWKstTRudJX6dDUPYwqnGosjwiU8iXyyXID4\nAn4XqcUUdigSInhad9M8lKeJPZlvRvCXRz0CTB8ffxlny8f7Cys7hYyPstVe\n7XtdMkE2TXb8ZFfaZJN4N0DdqVa+nqDcgof2lU1zWOXSfGjsihNp1//gvsPd\n6dnFlhplycDRjU46JnuY4J1x20REQPgKh1xOMzHDjxgrfMBoGQaE+W8ECEbI\n93AnsAisVuMD9k8cdJkY98gWzDMj7sfnlI0+16DoOT4I89vFtKk6995yiXso\nFbkwfPRXqlo4w2rfXE/n+WIRzztoA+nvvrEFJqjA8mI8+DzkYTm1RztHn2LX\nySMrfcTZZhnoDvF1WtDSy44aYCs57xLum13PhSX/3XW13vHadG2UK2YI8k+q\nGesJLeGTRBK2rDxmt1jsPMeP+et7JzYb8NHtByv1EzRUV3g11k0zB1klJbQT\nUHbgzMFE4lArpW2X/04Ei9jq4enondJADWkRJ1D9rVgfMA2NklZZ3OgDHS3R\nVXMsTzh3guxHe3ODbzPWsH3yh0YtgZhtI6ziKnT3AFNxSyGMf13tr/RWhhKH\nWj5u\r\n=Rae4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICSkGnLlEjN9oMXARna3TxY2k4bLVcGeLsWR9v0+ZwyvAiALn1sCmVEV6b56wP8uwMBwktu8bvviQ4/idF5QmYNweg=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.4_1553814074529_0.2727540608255037"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.5":{"name":"ipfs","version":"0.35.0-rc.5","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.1","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.1.1","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.3.0","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","iso-url":"~0.4.6","joi":"^14.3.0","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","libp2p":"~0.25.0-rc.5","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.12","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"4d303e842f3bdc694af574e8c7e8100bf53c9a93","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/team-mgmt/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT\n        - `enabled` (boolean): whether the DHT is enabled or not (default `true` in Node.js and `false` in the browser)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.5","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-9y2tO4N7R4nx4LxK76StXxbE0KrkApt7rUvLb11WNxZ2QNOWZWsUY8UjJSebuyVgMTjKXVOC3Evjdcl5R8Je5Q==","shasum":"f931e04e86ffc140cf22bb2dc2d51b1fc7280a16","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.5.tgz","fileCount":272,"unpackedSize":24986161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpfPxCRA9TVsSAnZWagAAFTsP/RvMD//Rp9ZsE3kc4Tj8\nOTjNDYakGlLcjVyzLWWz2c0j/bRUWcRzbhNZeQVYSKVQlfQ9YL9K0XQ3jn5v\nfsO9mmejDBIVlOJvGYhMh87RVlEf5HM9aM9CpilgbEpfy8Nq0WCFQaR7tg20\n1wijm2WkZ4ghw35stONDKrQssx2mlJ3Ya8W9XUZARjjAIUY2RyqCATgCah4A\nLU0JHtuSTSxOsgZ/WYuPkGC8PkSb33Ut3AjHBpZdQgt9tSzjaMXifWM4p0sK\nDOiazddmP7eBH2ZcahGVs8ptWvns3Bka8CMzvyQY3zomuJlNt2QlQZnx5mYV\nUivclPt4D3uJnoiGagTPU9WOsZsPE09ujQVR7h5Rc+/vvRtOII3igFW1FRgt\n1mSdIrPkoWoG7F7KoeVbQ6sH2Z88O4aTo2ges5XZQnVSIKzl5zOytCR+mCpK\nk38c3/WCRY1T4Ooa2MD1BOl1S3fJ+V0/LjQzIJkQ36I0xpMpA1B8lllBO2Vy\noMu5lUVgzr0ex9CPfbnzB/2GYidtmVap6smpzhxGcFh4AYox6SwomFovwiPM\nUhEv3X+aAieFrVKYNj5oBb9qmN31OVXNDb9zapiWD9IAAEqf3cu9ti8T28E9\nB3Kr+zfD+ebo/tQkpji/T5HQKnAn01+2ulMLCzfmJy+JTXknxwqPgwPJ20mS\noRM8\r\n=DhvE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA6MCcodMo61rPJRflzwDksXizPwIq98ADWt/S4sFF3GAiAUgNrEXasBNIYcq8Gt7wMqrtnD1h+M3j9qZUBdlByzMw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.5_1554379760585_0.7968606171368906"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.6":{"name":"ipfs","version":"0.35.0-rc.6","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.1","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.1.1","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.3.0","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","iso-url":"~0.4.6","joi":"^14.3.0","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","libp2p":"~0.25.0-rc.6","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.12","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"c86e8a111d05a52ee8ad7182569ff283b3297193","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/team-mgmt/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options], [callback]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.6","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-zUhIrfxvJJdxI5f0ZRyfMIK6nvEIPg8Y0GNffgTO5IoOa/OqWmsBzQFwKS+hq4PJDmOaX+TCFFy+EglKB+O6Hw==","shasum":"0db3189fddf13a50df9d82079bad74daf7c20b56","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.6.tgz","fileCount":272,"unpackedSize":24973509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr1fsCRA9TVsSAnZWagAAKr4QAJkm+GvB/L8XycRmYD+Z\n4cYNrA9clVh0MKvREhdjjeNsV/SFqqvxO3qXZbOMWvlVBEsVStR/A2ozImqu\nB+1gXQdB9lHrElY77ytsY+yj2H6WuSsAj+i3WQpMtY2w49PYRuCGruqrkCEb\nlr+At1Dq5pDKjbnOPyGD3EKCznEDBo/fCnIEWbejTtoarReSImF9jiWJ23t4\nf+/KAGVgprr6v+Aqzi+i8R4RZYfNpIXWtqDRdfDLNlxJx2bjJn/knk8OdK1v\nT5f/2l8D0JkTHbJKDAPwYeUxItK2LQRjD2LfXS9J3Ta9D0YUA0z7CZ8ihd+m\na799Gekm9eis2qJ3sZYq44/XDuqXX/JqH28dPmD9e+h/5aq2Ttw4Jkf68IJk\n7p86wncorKwNV3ZiwtEF1uKAW8JexA0lrKz0+mFszl5DcOg1Q2Bya38Hl5jM\nI2NA6mpE5qHfSMDBDY31dZKjBPXaPodocFjPD2HG204n3siqNGFIrHsIjivH\nD/fIa+bDer6UDoJIbAVG+b8ZB1tbmrJAniznBBFZYtuAGCdgtnoUadxjZAxS\n3bm2FGezbET/dh0LadBMjXBac8EtQVK9UP05gpG1TvppyyCltdezAqFY0jEh\n3kM47DRu5b/7pUn1nZuG5zpwyYgdbqy6Z2TS9QhBDlIuBoanTG3tYXtJajmf\n2ZQ3\r\n=6lSL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2IlziI1IUAc4ZWtwgWQRdOSJNRhXmggvq2zdGLOCXvAiAxsji4tBGPrIJcAI3dEby/QLqAFMEeZRK0d1xdb43/rw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.6_1554995179569_0.6018694871848591"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0-rc.7":{"name":"ipfs","version":"0.35.0-rc.7","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.1","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.1.1","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-cbor":"~0.13.1","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.3.0","ipld-raw":"^2.0.1","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","iso-url":"~0.4.6","joi":"^14.3.0","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","libp2p":"~0.25.0","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.12","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"85592769a8d4d6abf9a9cd9de3b7f2da81757676","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/aegir\"><img src=\"https://flat.badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/team-mgmt/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = new IPFS(\n  {\n    ipld: {\n      formats: [ipldGit, ipldBitcoin]\n    }\n  }\n)\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      formats: [require('ipld-git'), require('ipld-bitcoin')]\n    }\n  }\n)\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs\"></script>\n<script src=\"https://unpkg.com/ipld-git\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin\"></script>\n<script>\nconst node = new self.IPFS(\n  {\n    ipld: {\n      formats: [self.ipldGit, self.ipldBitcoin]\n    }\n  }\n)\n</script>\n```\n</details>\n\n Examples for the async option:\n\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      async loadFormat (codec) {\n        if (codec === 'git-raw') {\n          return import('ipld-git') // This is a dynamic import\n        } else {\n          throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      async loadFormat (codec) {\n        if (codec === 'git-raw') {\n          return require('ipld-git')\n        } else {\n          throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs\"></script>\n<script>\n\nconst load = (url, cb) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => cb()\n  script.onerror = () => cb(new Error('Unable to load script'))\n  document.body.appendChild(script);\n};\n\nconst node = new self.IPFS(\n  {\n    ipld: {\n      loadFormat (codec, cb) {\n        switch (codec) {\n          case 'git-raw':\n            return load('https://unpkg.com/ipld-git', cb)\n          case 'bitcoin-block':\n            return load('https://unpkg.com/ipld-bitcoin', cb)\n          default:\n            throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options], [callback]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mplex.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.35.0-rc.7","_nodeVersion":"11.14.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-W/i2Cz9x/qtWj5Am9pTQ1b05qFmWL+6oTZQoezk463eksYcXt7oCfW78ppQd5TJ4IshneOB5JcuNLOevrr3Fog==","shasum":"63f353309bd027b07df82d0aba4d447a0c6b4e94","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0-rc.7.tgz","fileCount":277,"unpackedSize":24986288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsJTQCRA9TVsSAnZWagAAk20P/3T+hV9BT4ugZixcbZ1/\nVSILzFrR0QNhxZJfA8f/h5zX7C85kIbcALuM8vPpYHIrpuLtFkLzjO5BYwh7\npdYxec7zeDnwrf/sGogVUVtINwCb4/3U57JqMo6Mu8T4KbWDX0xQgBMcABI2\nUxQOi9yVF2/6N1psP2PqWVGwrGiHSMJv1PgmneBokFCzLLTrLTY44vMpdSEw\neFveVCo4wYt0NPI3ZKAh0yLxiaxnMhSLTkYMz94sGNXIGx1KD3QV6ZjjY7um\nKBtLfqz8F7JbqC90wnuss/YXH2tClUyxWPUZfPli8RIlm7whpYMa+Qyicue5\ng51kpQYgSSVN1JD6ByBV7SQpnFKiH8S2uSIjp8RU+lZAoZld2sguv5g6oiWF\n+oa3Yra0v8BxT7MjumGNTXenrTJ24PPLgUnNGfirgvmCPHX2QlAPOINPOiDE\n5HF8EdUTGnqDqv7edTzyt/hG4g0WWRriR0KPv2jRKkH+2ydah7uR77R33bfd\nusNG1h26yjoSSHZNkVrTpfXlVeAdUX2hz0dPcouhsejIgxAPsH28srslFj22\ns3Ksi6lYIeRaG3dkpmGWjmQE8xSDW5et0+32z1kLMrTJrWF1ajkvGuUcxAwd\nzWxLEaDVsLnalM2FL5j+dU0Or7oPevYrPnA0npfzaVw+3v/3wZ3v4azHik64\ngTWe\r\n=9DMR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICuFCSivE+q3UCAQuWYLhavHGAJ0w1rsgWv8j78RL/gdAiEA9bnx2ZNGHSVqFhy7U7l1zH5ImdYGREhXpEJRzOHjhrM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0-rc.7_1555076303573_0.37696803129416745"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.35.0":{"name":"ipfs","version":"0.35.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","joi":"joi-browser"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.99.1","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"async":"^2.6.1","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^10.2.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi":"^18.0.0","hapi-pino":"^5.2.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^30.1.1","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.1","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-cbor":"~0.13.1","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.3.0","ipld-raw":"^2.0.1","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^1.1.0","iso-url":"~0.4.6","joi":"^14.3.0","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","libp2p":"~0.25.0","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.12","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-mplex":"~0.8.4","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.15.5","libp2p-websocket-star-multi":"~0.4.0","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.5.1","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^2.5.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.2","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"5c5d9c4f80dc041ed51bdedce5632a4698cb389b","_id":"ipfs@0.35.0","_nodeVersion":"11.14.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-79hxhXd4s+FzfYsgoMitAqekwg41+2iU5XZ0UgWONQoxQtTOX7bZGw7N6jws8l5NJpYqckv1MLSMsH/j4bDoZg==","shasum":"7e8c43c567c24805cc10bd455552403ba3d372eb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.35.0.tgz","fileCount":277,"unpackedSize":24986381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsKBSCRA9TVsSAnZWagAAg6gQAJoBZ1aEPfN3B74Up4SB\nO8/90jE0CT1TRJmEbu+IlImroDCQL6JEyBfie0tYafW6t8KxIGuJUkprX4/S\nUXSi2LYEY4KUxaF2yrgTd6CyYOJtMXQ3XNranXIiDJyr6xp/pEqp9AMUuL0A\n6JuYV+qh/yBXFsy4na713YVuB4ZwM2KIYM5XNrxY8ffv6hKSFveaNKAiJSXH\nCL6aegnzZ3FSqJMTqe8tjtuQUov3yyhoeWdhDiG9U2ctBPl6Xb4IkeZOfdSe\novovAG4bAKeVWpb+XcB1+BQRvzXXs5RNzL6ZJAOIB+I+B9AWePVsbwpDG/ts\nktiqM/h1beLsRJLFeUQD5hIiapBqWoMnYp/J894WR1Nt5qVV1+q6n08vItDp\nOPVFOk5/kKAjrLue8AjAzfBsUV9ak9C4d/b86bOFykjS8Ub9c3Jq/G3ig/FD\nTq2k79mmUFDbpOeN3ixIwci4eX+NDNsXO2QiOTWkii+MOjsA8Zcj7TjMdpjU\nnnMONl96HjXEoC2ZntYzLK+XznhpR6nollDPn+yrNJo2hN0vwD7eS636MxCc\naPoYE+TIvV1o85G2cdNgo39bCpfdSCiTvjAjMsnqhqdgXDOyMuXOJoMASwS+\nMv3gzj61h0vkYyiOLMMo6GDy+W7cyu7OGZ+e8Alb4JryydtoOBYHdZ+NuLOn\nRsnw\r\n=lLzH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuCuQchwjqYKyIaRJLf3K2J5rwnibCtrFDbT0CaVPC/AIgX2HEvgjL7Gg0KJHW6df+DcoLyVJsQHElD1PE7YyPX1o="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.35.0_1555079249336_0.45954430625244"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.0-pre.0":{"name":"ipfs","version":"0.36.0-pre.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","interface-ipfs-core":"~0.102.0","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","base32.js":"~0.1.0","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.2.0","cids":"~0.5.8","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^11.0.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.7.0","ipfs-bitswap":"~0.23.0","ipfs-block":"~0.8.0","ipfs-block-service":"~0.15.1","ipfs-http-client":"^31.1.0","ipfs-http-response":"~0.2.1","ipfs-mfs":"~0.10.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.5","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.36.1","ipfs-unixfs-importer":"~0.38.5","ipld":"~0.21.1","ipld-bitcoin":"~0.1.8","ipld-dag-cbor":"~0.13.1","ipld-dag-pb":"~0.15.3","ipld-ethereum":"^2.0.1","ipld-git":"~0.3.0","ipld-raw":"^2.0.1","ipld-zcash":"~0.1.6","ipns":"~0.5.0","is-ipfs":"~0.6.0","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","ipfs-utils":"~0.0.3","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.0","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.14.12","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.0","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"9bd99849ae66b6685b273f5424bf5edfea844eed","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" width=\"450\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/team-mgmt/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = new IPFS(\n  {\n    ipld: {\n      formats: [ipldGit, ipldBitcoin]\n    }\n  }\n)\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      formats: [require('ipld-git'), require('ipld-bitcoin')]\n    }\n  }\n)\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs\"></script>\n<script src=\"https://unpkg.com/ipld-git\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin\"></script>\n<script>\nconst node = new self.IPFS(\n  {\n    ipld: {\n      formats: [self.ipldGit, self.ipldBitcoin]\n    }\n  }\n)\n</script>\n```\n</details>\n\n Examples for the async option:\n\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      async loadFormat (codec) {\n        if (codec === 'git-raw') {\n          return import('ipld-git') // This is a dynamic import\n        } else {\n          throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      async loadFormat (codec) {\n        if (codec === 'git-raw') {\n          return require('ipld-git')\n        } else {\n          throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs\"></script>\n<script>\n\nconst load = (url, cb) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => cb()\n  script.onerror = () => cb(new Error('Unable to load script'))\n  document.body.appendChild(script);\n};\n\nconst node = new self.IPFS(\n  {\n    ipld: {\n      loadFormat (codec, cb) {\n        switch (codec) {\n          case 'git-raw':\n            return load('https://unpkg.com/ipld-git', cb)\n          case 'bitcoin-block':\n            return load('https://unpkg.com/ipld-bitcoin', cb)\n          default:\n            throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options], [callback]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.36.0-pre.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-nsIlASOpVw/J8sq/ZRwoWGkwelAjbvRGzJxadWOSR1vMuoA/EqT99g4YeDVz/WdSFf5tNxbrcUV4Vm97od5p0w==","shasum":"e8d140c8e8157c53b943f09ba6d39612da78ac4c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.0-pre.0.tgz","fileCount":288,"unpackedSize":26258669,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3sApCRA9TVsSAnZWagAA53MP/RtVxTMeuWMp29kVeXt7\nWI9gOL6ivYPWJzlCf1K4z6Hd1AuP2en7D8gQXEvMo2+DQkryYVJdFUqyZAbp\nE3LdbUPJGyR0X1zhHlbzujhDLb5BM/Tcka8knw1lKatv7EDwSYak8WfJfQqY\ncU5whnRsSIn9QcD+HBWO6yAQj32ExyVOPy9qT6DbzFQzfonTC8I4iYUrDLh6\nVEmH7y9T4m92jqYxNaEQdvjcdTF+yF+YC8FSiOvs1M96izHKX4DJ8UD8FrV2\nemiG9OzFSEFeDm57upe6Balye0n0zYDy0fI0b1wJjNP/0iR88d8rkxDMNNQf\nPh5jknf5uyqqy1MfnGgh3jk0FyCBgfgl/LKkRbSWorH0ybvKcIMDs6eUCMI0\nDLEUskkIA1zIiy0RXF78dTIrquZ9mIJy56got4/llHei9xMl7f9zf+htYycJ\nsdv2s/+8aHl9Mewc2kfvXms5pWJMbtYz5OuHt1zMS2v7rURisDAAcXkS75cZ\nhoM9kN0hTu+mKkv69mBBQ1Hap750Cbl6XCPBXcYfxIErpiGZSvWQhvZOZwB8\nwSts/kaksbJYYCVEt+eMMHmu9CQAFNrJAuGU48dOgGYDUUMWmtn7CDENqpRP\nn/aEZRj0YB4A9eAqGTnwhif1RFkhB/8Skn26anBqhbmGcszBhOFjg5dB7vpT\nryV0\r\n=4/5c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICMh/5M1lskuRQ6Nkj28pJGrfqOXCiLqS+01yiRTGdYaAiEA8X6PPClmSLJRkfvAVbEZpM2jBM9f3Gjw4VQx22S9hjw="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.0-pre.0_1558102056009_0.7090224035240231"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.0-rc.0":{"name":"ipfs","version":"0.36.0-rc.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.103.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","async-iterator-all":"0.0.2","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^11.0.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.24.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.1","ipfs-http-client":"^32.0.0","ipfs-http-response":"~0.3.0","ipfs-mfs":"~0.11.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.4","ipfs-unixfs-importer":"~0.39.6","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.3","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.0","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.15.0","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-async-iterator":"^1.0.1","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"9baa242ef8c4a478e89eb933fdc631298a4d3792","readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" width=\"450\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\nYou can check the development status at the [Kanban Board](https://waffle.io/ipfs/js-ipfs).\n\n[![Throughput Graph](https://graphs.waffle.io/ipfs/js-ipfs/throughput.svg)](https://waffle.io/ipfs/js-ipfs/metrics/throughput)\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/team-mgmt/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [start](#nodestartcallback)\n    - [stop](#nodestopcallback)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN or the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make a `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nconst node = new window.Ipfs()\n\nnode.on('ready', () => {\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n})\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows(should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `new IPFS()` and waiting for its `ready` event:\n\n```js\n// Create the IPFS node instance\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  // Your node is now ready to use \\o/\n\n  // stopping a node\n  node.stop(() => {\n    // node is now 'offline'\n  })\n})\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = new IPFS([options])\n```\n\nCreates and returns an instance of an IPFS node. Use the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = new IPFS({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestartcallback) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = new IPFS(\n  {\n    ipld: {\n      formats: [ipldGit, ipldBitcoin]\n    }\n  }\n)\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      formats: [require('ipld-git'), require('ipld-bitcoin')]\n    }\n  }\n)\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs\"></script>\n<script src=\"https://unpkg.com/ipld-git\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin\"></script>\n<script>\nconst node = new self.IPFS(\n  {\n    ipld: {\n      formats: [self.ipldGit, self.ipldBitcoin]\n    }\n  }\n)\n</script>\n```\n</details>\n\n Examples for the async option:\n\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      async loadFormat (codec) {\n        if (codec === 'git-raw') {\n          return import('ipld-git') // This is a dynamic import\n        } else {\n          throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = new IPFS(\n  {\n    ipld: {\n      async loadFormat (codec) {\n        if (codec === 'git-raw') {\n          return require('ipld-git')\n        } else {\n          throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs\"></script>\n<script>\n\nconst load = (url, cb) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => cb()\n  script.onerror = () => cb(new Error('Unable to load script'))\n  document.body.appendChild(script);\n};\n\nconst node = new self.IPFS(\n  {\n    ipld: {\n      loadFormat (codec, cb) {\n        switch (codec) {\n          case 'git-raw':\n            return load('https://unpkg.com/ipld-git', cb)\n          case 'bitcoin-block':\n            return load('https://unpkg.com/ipld-bitcoin', cb)\n          default:\n            throw new Error('unable to load format ' + multicodec.print[codec])\n        }\n      }\n    }\n  }\n)\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = new IPFS({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestopcallback).\n\n#### `node.start([callback])`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `new IPFS()` will automatically do it for you.\n\nThis method is asynchronous. There are several ways to be notified when the node has finished starting:\n\n1. If you call `node.start()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.start()\n        console.log('Node started!')\n      } catch (error) {\n        console.error('Node failed to start!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.start(error => {\n        if (error) {\n          return console.error('Node failed to start!', error)\n        }\n        console.log('Node started!')\n      })\n    })\n    ```\n\n3. You can listen for the [`start` event](#events).\n\n    ```js\n    const node = new IPFS({ start: false })\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.start()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('start', () => console.log('Node started!'))\n    ```\n\n#### `node.stop([callback])`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous. There are several ways to be notified when the node has completely stopped:\n\n1. If you call `node.stop()` with no arguments, it returns a promise.\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', async () => {\n      console.log('Node is ready to use!')\n\n      try {\n        await node.stop()\n        console.log('Node stopped!')\n      } catch (error) {\n        console.error('Node failed to stop cleanly!', error)\n      }\n    })\n    ```\n\n2. If you pass a function as the final argument, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n\n      node.stop(error => {\n        if (error) {\n          return console.error('Node failed to stop cleanly!', error)\n        }\n        console.log('Node stopped!')\n      })\n    })\n    ```\n\n3. You can listen for the [`stop` event](#events).\n\n    ```js\n    const node = new IPFS()\n\n    node.on('ready', () => {\n      console.log('Node is ready to use!')\n      node.stop()\n    })\n\n    node.on('error', error => {\n      console.error('Something went terribly wrong!', error)\n    })\n\n    node.on('stop', () => console.log('Node stopped!'))\n    ```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list([callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId, [callback])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options], [callback])`\n  - `ipfs.start([callback])`\n  - [`ipfs.stop([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options], [callback]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options], [callback])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap([callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key], [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config, [callback])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with WebRTC is ready\n})\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = new IPFS({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = new IPFS({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\nnode.on('ready', () => {\n  // your instance with websocket-star is ready\n})\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nIf your [electron-rebuild step is failing](https://github.com/ipfs/js-ipfs/issues/843), all you need to do is:\n\n```bash\n# Electron's version.\nexport npm_config_target=2.0.0\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n```\n\nIf you find any other issue, please check the [`Electron Support` issue](https://github.com/ipfs/js-ipfs/issues/843).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.36.0-rc.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-QlsYDQd7Hz9HmZitSqxveno9R3iV7xp/fzEcD1f3u0APv2KPHnumGvNgyMrMImpZtRcFK6I48YZ0pLPK6doYvw==","shasum":"596b612c1e10126607b1bbe21a04be288001ef0b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.0-rc.0.tgz","fileCount":288,"unpackedSize":26546910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4+6sCRA9TVsSAnZWagAAvg0P/1AMaC2Y2O4k3duDK4dH\ntEFthw5PuE3Y7yOSC7eZ7WYPY7LUu/IDfZkUx/F7y9EFMuIy8ecKeXYjUt3n\nY88IvV86hRPOAokuk51tqXiUjW/S2RiS8W1wYYEG946mj5iZmHMIcfCqkwV8\neNJ9qBGGOyiChb665wIZYQ95SsLel30MdbR+utt3BuzU5unsb5edtgfXJCCc\noEm9/SUksEsfB55MzJdmcDk+oD8oiyJ81pik6UudUgAzkraGzIB/AmqXvm3S\nLmZWJL0GCBP6WjU5iC1CYStq8uX73sNANDSVyOETNu9xpr6Z3/XgothO3GqC\nIb1szlKWE0m0DUiHjiT6hB5FHPUIZBZEoh/qd03yGO6d5f4z00gpF8Ia68RO\n7IsCVrZ8u/2KjpG9fJNMFJBBmOXDxjlMg5pjoH/42erLgEEIURP83owHZREC\nGZzICWcA/PxZpqDUkn3iWCqSq5tKNbLof/GKlKJbiPS01M7G0Bq3gbydcVfM\nH54Eta6uQpiGqsQ4spjO1IpyExKI5Jh1cN/+knrRENsJ075pZmNwrmhGHbWY\n/w3UmRMndOgeOvY6eOnLmGCc6KNYT4vkzzyHePNnISyUZZ++t12FYOzJM179\n2A2iik+eqDG1V8Uw1PXgbekI8RpzsWQr7lhtsfzQL+Y8Xh9qlxozf5PsyGtL\n5D0f\r\n=3uUu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYzuSwrxPSvF+tR5nQlvbuMtJ6L156JJwUkX1bYJDzUwIgbxTJblrGU5uIXFWs6oziEMGdkxLNKna+l6Zs+086f64="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.0-rc.0_1558441643549_0.8315361862984916"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.0":{"name":"ipfs","version":"0.36.0","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.103.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","async-iterator-all":"0.0.2","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^11.0.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.24.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.1","ipfs-http-client":"^32.0.0","ipfs-http-response":"~0.3.0","ipfs-mfs":"~0.11.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.4","ipfs-unixfs-importer":"~0.39.6","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.3","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.0","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.15.0","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-async-iterator":"^1.0.1","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"84978c46922eb788940f030e854b48d1e73a8524","_id":"ipfs@0.36.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-SBdXg7zjx0NJ+wb7i80Oe0D+swUtETSjmwxwxxbh4M5/F0ed4f0jO9bRV1XhPhXFsL4e5PIONJQRza3NdUKWFg==","shasum":"62c6eebd8746d25d635af9fa75bf1c4695b0ed8c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.0.tgz","fileCount":288,"unpackedSize":26548024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5ST5CRA9TVsSAnZWagAAtYIP/R1ukFXrUacBIYbVvDnM\nN/LgR0/v+wKmb/LRCWYXUw0HYcOgMo/U89x/lStSY9NI8CoDmEOyMUfJufhW\nfBULc7zhz0bZeb3ppqDw7CQmgib0NI7IJs5ME0gPZaGC/kKlRSforEQa7ZDy\n5nrFfER6A9AKgA7uNdd9XHIPrT0zblzxjwYJBWjvj5WxRCEJms7+/7IJXBkc\nGlggvNoGWLF8UybzuQ59tTh8nh7Q9bxPbRJnMVfESxoCSBELHa8vqx2tgSfM\nUXainqSqDiR3iAnTY3TH04k5DeYmoiwGRA7WnlAhftkpZHj62V+RK7H3yt0y\nKyYLmbzttBT2FQSeAWQmOVXEApFzX97eKqllp2ST+bEP9XpMaiEuhZKSluUB\n0qq7zGLPee9e3yiV9bbnIjb7ewwwDC4WPOTdyO6EVgB8SE6jIxG8JcayfGxf\nT0L3xjCIPh0rQcjTIVR52sBWFvP7xku5WdYgu5Rer2I8RfwmPDsa7E2rZip6\ntdEkMNSskPx72Gc/4EfW9oLpNDTeR7aPrrAtfPf+JZAtEfw8TNOE2su/XVmg\niJ0zFKBiWX11ODOfBNPalGhMJQGpUomq8aq1bdu5tsY9fGy347jFgXnchy05\nXz6ItrPCZ5bO3gT32h8EicHANXdNHftfLXvshl3CK37FwqQ0KZG9DljhoexQ\nAIrJ\r\n=YrTx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVl29YFCB2VftLWgWN+JkPQKD1K4CfwR77LaClHL3urQIhAPTmavdlx8LXlP2XNNrWXFrnCLlUILaBqT/0kCkvLxl/"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.0_1558521080093_0.4486534593412821"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.1":{"name":"ipfs","version":"0.36.1","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.103.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","async-iterator-all":"0.0.2","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^11.0.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.24.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.1","ipfs-http-client":"^32.0.0","ipfs-http-response":"~0.3.0","ipfs-mfs":"~0.11.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.4","ipfs-unixfs-importer":"~0.39.6","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.0","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.15.0","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-async-iterator":"^1.0.1","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"bc3cd1dd6db7a310ca2d1abf0925d4f5e9209840","_id":"ipfs@0.36.1","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-vk9fPQYf7KxQqB3HSwmzaLKhbNL3ev4mdl7XNrzpVzciXSnIinCgZ/NeNVfoLtIzBKm0cUyuaWsxQ2Wz+yDgvA==","shasum":"edde5735d1d540f867cf795e0419a4c66b50b427","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.1.tgz","fileCount":288,"unpackedSize":26549080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5W9pCRA9TVsSAnZWagAA4EcP/iFP7mXG0kpGEnWN959z\nHT5Gac8VlyGHDtRRAwn5AtJfkvW/HgZ0dRiZKSjPLHCpxm2AevcJD2NY4msk\nC16xECAH4AvIjyum/mMX7pxUTPepOk+ljvLz3qbWCDi5PYtnM36747kBumm3\n0Ilj5u8oPAd2Yaq32X8oYpSZVvRZniHpdWzBthSL9Zd+Bqjx4GFqH4EzkCbq\ndV05RFS6BANSuuYDdS8Ke0chGKTYdHxeMOM4I7/5adim+P98OoL20evr9I4c\nb2WyCjl14D9B8Mh7Jc02KtjZYpHjakJAi/b2mdz6hlLKqTmKj8hGC/rZjKIY\nYjdfX5esmNoK9kraEQpFqVjF2v7aHWATWb+eQFFOgeYEf27fOHTFRz9lQ80H\npG/zZEIE9w4LSEr5tTaIGi8OPNan4HYlaXW1sl46OZOERW9boQOX5BZTsx5b\njB99TU0ReWtvONwuwRdOVPDCnO4rj3iL5D/0z3VKIwpjnIXq+MFsADH3uUu7\nrQFzcSXmD8V4XC42iMcf4xaA9wD4JKvNn3CZzy6x2zn/j4bnxmMfairKz+c5\ni9Xwa0MhKL0ZuiOMiYHOooOevtTyl15mi/cxEgC2M8A0cdZg5XT/ChR/TEU3\nPk3JpdckmOghih2VXVrktY9gZF1db3dFk6ziYTogtsja628ptrZEXEh4RPqu\nEJ0j\r\n=aWBu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqJl0Ocq+eXJ6PNfLqgEAgWm9V3EeYKIMrXTNmCDjnTAiEA87kD+ve2FlM7/g2MOCmELSTkq2IVvkWGt+Ku68PI7nM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.1_1558540136138_0.16164417307365797"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.2":{"name":"ipfs","version":"0.36.2","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.104.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","async-iterator-all":"0.0.2","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^8.0.2","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.2","err-code":"^1.1.2","file-type":"^11.0.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.24.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.1","ipfs-http-client":"^32.0.0","ipfs-http-response":"~0.3.0","ipfs-mfs":"~0.11.2","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.4","ipfs-unixfs-importer":"~0.39.8","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.0","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.15.0","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.1","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-async-iterator":"^1.0.1","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.1.1","receptacle":"^1.3.2","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"4005f6b4a9e7a3b38c02bd612e1a40a656c9c3c7","_id":"ipfs@0.36.2","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-cvCIlqDYnJVSjg/lws1QYDAl0XOTYt/qEsNWoyzh1fj/mfJJo0IsLKLMlPIDVI4wlZaybsaJs187zwLRyOrYCw==","shasum":"13079e3e3ea9e386f8ec2c7e30960b8640775f48","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.2.tgz","fileCount":288,"unpackedSize":26529868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5+qrCRA9TVsSAnZWagAALyoP/Rg/m7OxSHJuFxRExdlM\nyRiM6vtgkm2UwmfTcWRlEa9dO/SUC+pMmb7SdaQog5hYBhoUlD0de31qNzqC\nZdlKy1xwH9KyXaXBj9gskhlRZ7dpx/U5Mo1A+rCcl4vCy+46pOynVdK2OvCq\nuRWULmTqbvkV/vljJW9DbmzdZeP9H+TbxqxvQ/hw93cYJDgIe0EetYw4WO7l\nXoOIXBZBf2kSGgViIDTtPoklgrELo/WLHNgt6Sr5Oq1igxDpr4O1bnWyR1mr\niai62SV1T04TV+GoPh0iXr82nWSyGMbox75SZ35OD3y+aqSuwpfqzOz7kf6q\n45UzS5ZVgS2jOMvXnwXSmvQfW1i6QNFdE+/qQd8WEAlCmx1uUHQTXlvboT40\ncMh7j1vVUoVdIAAsElr/hGdYXN1DCvdO1T9GFMOabc1NFAkdDRp/lsjYqSYN\nlkShBYBZi7J2Txm59BPw7r2yZlfeUquxS3FUTadKoWChlrfVHEKO/dPgJB4g\nCq+9InsPLd25wp5hNfftB96cSTTWXSlmX2oV8DIkc9R+ERXb/n7qWDFlMLvu\ndwrA5Yu90VrBWElvTkD1OoeL3g96U8gUnsB0+kIY/J7K7ZsTbjqaSVdhxUgf\noxkrUz2qti6dWN5QeZ9OfGSXJmssQWaDKClTh19OqbdsVHyDka4erg2JR3N7\n/Geq\r\n=TfkX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChCjs9Mh+WYbPpWwd38601f+2KzKmWu/CdeXbCuQyl9AIgDuemYj1dXboxaOLEmW0lf6rh6e6hFbQSnYsqn4PPHSc="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.2_1558702762245_0.23490867136960336"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.3":{"name":"ipfs","version":"0.36.3","description":"JavaScript implementation of the IPFS specification","leadMaintainer":"Alan Shaw <alan@tableflip.io>","bin":{"jsipfs":"src/cli/bin.js"},"main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test -t node -t browser -t webworker --no-cors --timeout=10000","test:node":"aegir test -t node --timeout=10000","test:browser":"aegir test -t browser --no-cors --timeout=10000","test:webworker":"aegir test -t webworker --no-cors --timeout=10000","test:node:core":"aegir test -t node -f test/core/**/*.js --timeout=10000","test:node:http":"aegir test -t node -f test/http-api/index.js --timeout=10000","test:node:gateway":"aegir test -t node -f test/gateway/index.js --timeout=10000","test:node:cli":"aegir test -t node -f test/cli/index.js --timeout=10000","test:node:interface":"aegir test -t node -f test/core/interface.spec.js --timeout=10000","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js --timeout=10000","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"homepage":"https://github.com/ipfs/js-ipfs#readme","devDependencies":{"aegir":"^18.1.0","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.104.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","async-iterator-all":"0.0.2","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^1.1.2","file-type":"^11.1.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.24.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.1","ipfs-http-client":"^32.0.0","ipfs-http-response":"~0.3.0","ipfs-mfs":"~0.11.4","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.6","ipfs-unixfs-importer":"~0.39.9","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.15.1","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-async-iterator":"^1.0.1","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.1.1","receptacle":"^1.3.2","semver":"^6.1.1","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"e85f3c478415bb57169049939991b390011a9e12","_id":"ipfs@0.36.3","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-/KQPTM4Oh72o7coI68qIfe1VBPy/LDfPMLUGV6CDOGN1U0ZQJWbKnPUYgYjwx61RNt4Ku3tH1kaiTLCwokYtMg==","shasum":"feab3b26d5c1c6aa07600626484ccee1b04d699b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.3.tgz","fileCount":288,"unpackedSize":28256882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7/GQCRA9TVsSAnZWagAAnFQQAJNgFMfsjFJ/Ne5OySdJ\nq2Txu31TUNw2I+b249wTnA07BnbEsdnldmCdCR/Bw6pK4G2H9uM2InAMQwrU\nfz+RAO7oSKq7Kq8ekGiKyG8G66sFv0iIgJzBAdcVoy19X7KFzcweAG8z7F1N\nZSIsNFdjS0+h0nxw2EkB1w2+I8hl46Kh04bBbvrEWjyz0m+snjBiTYxF0tQa\n9Rrn5+gczPuiXLlnSHEqtuM3IU6PHR7c0aVYiT8XkMUWZhSz+J/Um3rIJ5wZ\n1jjtJr4hHqhsJFq6hvOHD9pQMSMEtH4FivkttR7aFCK1p7SaMja87LuQnopN\n77l71cF74Qvg8j8K6xgHFEKC9e93sCTwmNkFoktpGoR/WCcOyY97TrmT04Pc\n2sxWZ0JDn0FJxwzbIB6dFSfnnn44pmKW/tQevk2CuC/93c18luQqb6xWxwu/\n3oizRcjX5wrYLIXNJgShJTlr5SdFnkMf8x9EL97/LyPPEuoTmPZg+ibJFlAB\n6Djh3dq/AJTmOq0M8ZaeRTvrZ2GTRj9N1egkrHPuvHh63wICcQIKTSlGg/Fx\nd6u2Zfe6opg3Aih3bxjT53u+A9MOte4z7LehnHHfNEZRnTym1uTs+BIStwPL\nO1A/WNV15d3eCvnqORss9gYYyL1763vAxPmn1JYynr+peDv8hsnzu/4w8Htn\ne2Lj\r\n=XsCR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFoycYVwQyK9XahIqUOF84YMCvtJxoltuOl+p8971xhoAiBzHN1fIQkBDCadu2GbENE43FKxcIMvNXLcoLIrs5snsQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.3_1559228815009_0.6926956521418046"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.36.4":{"name":"ipfs","version":"0.36.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","boom":"^7.2.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^1.1.2","file-type":"^11.1.0","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","human-to-milliseconds":"^1.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.24.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.1","ipfs-http-client":"^32.0.0","ipfs-http-response":"~0.3.0","ipfs-mfs":"~0.11.4","ipfs-multipart":"~0.1.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.6","ipfs-unixfs-importer":"~0.39.9","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.3","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-kad-dht":"~0.15.1","libp2p-keychain":"~0.4.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.0.5","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.0","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.9","pull-stream-to-async-iterator":"^1.0.1","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.1.1","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.0","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.2.4","yargs-promise":"^1.1.0","prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^19.0.3","base64url":"^3.0.1","chai":"^4.2.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.4.0","dirty-chai":"^2.0.1","execa":"^1.0.0","form-data":"^2.3.3","hat":"0.0.3","interface-ipfs-core":"~0.104.0","ipfsd-ctl":"~0.42.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.1.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"88f4e264ee14986c2b2eb16263f747631ef58958","_id":"ipfs@0.36.4","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-DRxX5N3D+qMpNs8/RShIIk7Ilb1Zce4ZdrGf+HWarLF0ljbZ4ZVLMJy9mAbC7mEiic+wtgwGLw4ACZHe3xIMQw==","shasum":"54a6238d433509e84c94f64f4ee2ee8cc3f8c788","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.36.4.tgz","fileCount":266,"unpackedSize":28051795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCIgECRA9TVsSAnZWagAAr5AP/A4yIiJPVoZUA88Q//mg\ns926NtdgsHn9ofVXmXdn6+gv/UeA+IKIy3KK8/cEdUqQMWk+WddZXcQ7GYc9\nCJ2qOdIT0uwTqFhsgDn/Ue9P5ivZ5Gw8koas9C5KXB6JKTWs3w726n8GjQb1\nCqK7qZ2YM8iBO1F+CP60zxFHl6yqBLR7sxYGqYFSP73RWozbTimgJfP1XgxZ\n2rByOhHcKFfO1pci2dftbzI3rlPuWWOErhcIS8sugRGiwf6VoS1hmctTY3+p\nPjTMTQA35MASZilpXy6cBE8jKYblvnyQJMoQciEfYUtoBFz55WGetMoU0eWC\nDpRalshHFTI8D3FOLML+ytLd2w6myMafhBL8C/g90KsGCtues49MX/2UW0hR\n8+Qn+QsgaYu6gll1KHxruG4trKx3SprrwZzsXGkhfebS9CzzBs36D+ilTUBm\nsihlMy4c/AujAFDA/p4Q8ypg1Ej84CgdmQWu1XdqAL2DNIg1MBbJfsDQzlHs\npe54Xxxe2mZ52Anr5xOiCUF/y0OWweId/h+aK/C8B5ewEZ4gM3j+cNw8cngm\nUaggDUWLccUU+2nkLTcWAbOOQZEIkNVPE2PHNWYU3dW20vVP+/zqy1fksYNk\n/GEbQnKVQa8nhBC769AWhbx/5BR0LdWkeuSYfm1zpRnZhzV0aJlpM1Zq/ArY\n2TCd\r\n=tk/q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVy/t8BKkTZWPoT1oyikHlepQr4wlt5JHBq1Hm6AVUpgIgPsz0iYvFuh/s6DETg2FEs0yKjzBmb/tW9Bj9MDGJjcU="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.36.4_1560840194718_0.5350827239242617"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.37.0-rc.0":{"name":"ipfs","version":"0.37.0-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/boom":"^7.4.2","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^1.1.2","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^33.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"~0.11.6","ipfs-multipart":"~0.1.1","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.0.3","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.4","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.3","libp2p-delegated-peer-routing":"^0.2.3","libp2p-kad-dht":"~0.15.2","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.11","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.1.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.1","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.13","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.2.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.3.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.3","form-data":"^2.5.0","hat":"0.0.3","interface-ipfs-core":"~0.107.3","ipfsd-ctl":"^0.43.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"readme":"<h1 align=\"center\">\n  <a href=\"https://ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/QmVk7srrwahXLNmcDYvyUEJptyoxpndnRa57YJ11L4jV26/ipfs.js.png\" alt=\"IPFS in JavaScript logo\" width=\"450\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://flat.badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Dev Calls`**](https://github.com/ipfs/team-mgmt/issues/650)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined [`http-api-spec`](https://github.com/ipfs/http-api-spec). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, sharding: false, dht: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it.\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.preload.ipfs.io/tcp/443/https`\n- `/dns4/node1.preload.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`http-api-spec`](https://github.com/ipfs/http-api-spec)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by http-api-spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","gitHead":"109a436cfea5392b3f8a1406e8e4a1dc586a56b9","_id":"ipfs@0.37.0-rc.0","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-dXYPVkGzISnshTQHD+rmDq5B4/iy39vgzh8eciDkoiNJpDKGRQf7oY9Sdgec4xf4007qxVysdnvlsBJ50kCVeg==","shasum":"d3eff72d07a4345d9ac95665ac7c99ad13adf954","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.37.0-rc.0.tgz","fileCount":267,"unpackedSize":25084228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLzhDCRA9TVsSAnZWagAArK8P/iM/kVdwcF7Nz5kH8tZj\nJDSqOYztAFt9vwA71CqhkYQeo9U4dRSpfVcYcaOush9BTLZp1KdJKJTChsU2\nUzRyiGKSmtG49oBQfIvob0kkk1RzxdzcPfEsOxL6FCNWQiTSpbj9IStpeJW6\nH1cSoE8YCekFv874tL2PEf4Tefno1qFRxJ7u66RR3ENiCMIFTDjxFIVPFFwi\neHmrheyeGCcMKeo6zpREzRXIOXcdwloTBpk+Yv+6o15RSVI+L0KBsadtK53q\nIsS8ycYPALaZoV+YYpQY/dU+u/pPRmjq/2hin3A7awN8xPCOQwupB1yJQu4U\nBXQuZvUsdL8X7j/sk5zWoSyTHV2haUiqIUjj5CyyCCbSdS55IXAOglXS4qHg\niQsiKH06SKv0V9UyZkjJg9HkFhvF4J9S7fqxaLeRIK1r2wNrJYjDksg5Hd7T\ncXqkaQfOUlKi+AI3gU1oTNLAbWfTn1PPhnKCCiOTpPypl9yvgOA/trC4cowQ\n9U3UtZM0+yDSwmu38dteDAFK44aBomJkT7sHiYNa7Qk7dtogUc36+kixcd9T\nZZzrtVQOs5e2PkcBIfGZR82VD3tHjUTPviWPRYlZAyccTsy4OHzU2Fqa4HB+\nhgBCd8DKf0xywmgGJM8PHsV3/HOaon7do96csJoUE9zavJ+guLM2frNIZ5a0\n2c9a\r\n=YsC6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxa/hEHcIZrexoTFaVIbpjuOlHy3NoLwiX9FzAs3vSnAiEAvcAPILY8GUzgR6l1kG6JyAC8cD0KKTeWi+gTVWPVEX4="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.37.0-rc.0_1563375682313_0.01662226946690759"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.37.0-rc.1":{"name":"ipfs","version":"0.37.0-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/boom":"^7.4.2","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^33.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"~0.12.0","ipfs-multipart":"~0.1.1","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.0.4","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.4","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.15","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.1.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.13","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.3.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.3","form-data":"^2.5.0","hat":"0.0.3","interface-ipfs-core":"^0.109.1","ipfsd-ctl":"^0.43.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"readme":"<h1 align=\"center\">\n  <a href=\"https://js.ipfs.io\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</h1>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","gitHead":"36293353a18c2fd92880ca0d1cb692af35212543","_id":"ipfs@0.37.0-rc.1","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-B2sxH/a1ouond8CtuMLZQOsEpD/DZifBi9VqiuuPWVqX17UJOvs7vTOX4aG959OCGFhLjy/MTmaIWzn6aaW+fg==","shasum":"6f3e0bbf217547287c3967faabe4c791ceb46bbb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.37.0-rc.1.tgz","fileCount":267,"unpackedSize":25517860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSXhrCRA9TVsSAnZWagAAXowP/R3f6QLRIFdkN3d1taEZ\n7WRKonjdr83Mz7iKdoU5VGSsVxhrdIuEJMKIHPteQUP8rbo1O7KVhNHSKSaY\n6diAWRzBE8PcUiqoagyAHfIVInNXfdJig7fUdrulQysAvD3ETj9H5haACkyG\nH/sBKGCXKtE8seeY8/GKtN2j1geDnpwmTyAJexiaxfqMwnhnLkHEBurujVxj\n9j5KMiRG2gA8SzoiXx2zT/gtzhiUyEUe7hSEhqJsH1wlDI1uaNlRlhnLWVK9\nqFUfoqEmlenujKAMX4DzAl2gAmF3C1RBKUzrzAZiN+9jfnKwCOkGaZoWJVmx\nF5bYRPpdkKa7KNnBg/O34iF1BFCG5XH5N12lYs8e0yXRrBcQoln79k0U8NZn\nooemh09pO137ihZPxRAjXj9qsL9UWL/u4TuNYcECvxgbQsU6Y24p2w5Lgwyp\nLALjcfCpt3dMTqq+w0Wf+I4QPc1hCgbplWts9m3WwSwkNWdp2uwv3lVsMgva\nNk74uuaG5IjCyU6mYWENiU2tJpgcPjuxATvabGyd6wcEroEwi4lzZG4WASZe\nnqiyB3MFs/j9jRE4QSxsbN0ry9GCR30HT9uvC+mfQTy1b8TMdQw632YJQyrb\nz/nxsgdzjRsfKyo/mI/9L59WzNy3gUCPmlb+4aVt1v5fV12ZXyWW32zFad0a\ntumn\r\n=kEDz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4u0LWJ/hFvqOzWk40B6Olc4hrZG3fu/SBsub5CPnU8wIhAInhuqnQ0zK85BJMrH3egmIEiDboenbTPwHNjrl5qWxs"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.37.0-rc.1_1565096042884_0.1766586136594792"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.37.0":{"name":"ipfs","version":"0.37.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/boom":"^7.4.2","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^33.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"~0.12.0","ipfs-multipart":"~0.1.1","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.0.4","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-flatten-it":"^2.1.0","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.4","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.2","lodash":"^4.17.15","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.1.0","multiaddr-to-uri":"^4.0.1","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.13","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.0","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^13.3.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.3","form-data":"^2.5.0","hat":"0.0.3","interface-ipfs-core":"^0.109.1","ipfsd-ctl":"^0.43.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^2.6.2","sinon":"^7.3.1","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"5d116334663594ec7f7412fb4b9ace3043eb672e","_id":"ipfs@0.37.0","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-nZb/qMmq3G1IswN2g2DL9u/mdRMND5WvgChmcDiq4Z0zyntLTaCMgwnXDAnCwhXyMLanY8AlGh42nq+DQoc51A==","shasum":"a18741b4d75a3b2cc9b8322fddcfaee0ff235565","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.37.0.tgz","fileCount":267,"unpackedSize":25518034,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSaKECRA9TVsSAnZWagAAAiMQAKGv2aNAlXzQbS5dbB8Q\nk4TYNBuEVXNq2bPeBE9fY6Mtuwck+D7mgB7sDSap05dHczWduAF2rQHeD7zT\n8Rg9KTQhdxnrsvjZ3xmJdxlgBP5ZAopYpvR+yTFWv3mxrEnuBN97Tx3lROXb\ntTGexZ9fjwFZ8LVHCjdM6wbVJCl0UPy/R15fbV/G7Gu3KATDcoWNVqp+Dkpu\n8o2qejQ7kyO4sF9OqeUDKaOndyL2i44cPy6bgUW7+vrCFwu850znKMZP21vX\ncpOZI8HeUk5mHqU724i2fdFGU85ftiDpeK95f58ezhxVH1SO/A4P+R7zoVPF\nkQYNtxbyt6JTWf+2XIxBU29wTnBumm+dySOBi7jKNBXewDin+PqASxR4pXyO\na9c0/yAS7I3KSRobBC8BqGRsipMdnbXjUbyTYOYkK9CZWefLpp7JaO0dgFgi\nzaIMSzINW1s65qqBWgeU6AcObMaMZO0MMRxbeCrGtn8PZ02oy4aMLgazRWBe\ngk8i5MATg+Wf0QzVODODdFfzT0SUMkAFX3ClphfNFxsNHiByzAil4gmxpmDh\ngem91dZIwW0zSHidPAvBq9qM/ix4Z3f1XhsYaYsF7cksIHsKej5hV7jeFuLI\nS4VTqanRRUDLh5NHNvxJK8qrUvQ2jlnfBRb4EjUfqDxI+uMFssUYDkYs5dgc\nzNqJ\r\n=db8Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFDU+dgXVTZuE65ao/ZfLZgVWb/Fw+7CHWMzk1zg3rlwIgE0cyHO/3go5qyQ//6DmY3IzXulEBeSftc7sSyj4q8Dk="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.37.0_1565106818720_0.6585028785929998"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.37.1":{"name":"ipfs","version":"0.37.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.1.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.2","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^33.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"~0.12.0","ipfs-multipart":"~0.1.1","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.0.4","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.4","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.3","form-data":"^2.5.0","hat":"0.0.3","interface-ipfs-core":"^0.109.1","ipfsd-ctl":"^0.43.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.0","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"9727bf39dc8814510b805070b24a895e4eedffcf","_id":"ipfs@0.37.1","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-owolbhlcDBxRKlk2buSavzqV1XDN8KR7a4xqfLee5exxWDdI1Z/6OIY3aqlw45RIp5D23zCNqdrEGqKZVo/uiQ==","shasum":"a92f51f662eb71fdec36e96ed76bdfb60f38f891","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.37.1.tgz","fileCount":267,"unpackedSize":25505951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYAyICRA9TVsSAnZWagAAuo4P/0Qpuzj5SgByTSNLdQA9\nJG8xBqJkwFo5VJWW8COdatEzdbDTOXh+m/Xc5RrAWzKGsILHMr+opQhJw7GJ\nJdOlLCkBgBW/+fRRKCZsT8U9wvDGmA2BmPOf6EolY1HXMycnbzoRUTSW+J2K\nTJSZ1LowkDARXx2Jx6EHUipSGxFw6FgZ/qUVMuvW6yH7XApo1dDPJtmxixyU\nOSY3hUwyKNOHsZk3+8K02YX7e270j3KFfW7D6zVNnnkZiIFH8yh9qwHK/tCY\n+0D5xeL1AxFGoz1pHWi+YiRA+OAYC0nEp6wOQLOyUbVE/bBblgBAfM4ucWr/\nYtnn4p0yl7XG7j8s60SaJiB90rDZ8o/jnaJUk1j/JQvTMjb8HCgyaBQKnnWX\nxiCctT8sUnUZEEcl2askulEn+UA5wuPMHTUZ6cPFbC/Y7j6cEwpHpWQ1/Qhf\nGdF/wVzDXiLR2xYxsxl0qAHDyFFjujcMaxB+tc395eua6f41N+4D0ght8dk9\nHpUr2LXJCCwqlgupJc8U6Ub+ozI+/lhggd4vhpdfeODNlNPNODTp0+QW1drd\noVudyVUUYfuZmEcT3tI8HnTmOrTMC5z745Xkg1QTBpucLql7v1ZAUBFRzVx0\n3TtKhWLmP5pQ2HWxaN3TGj5CP2HRfNjknKB7obxnEUW+0mDxMsQIJV3GOvQ7\nUyDK\r\n=aYJz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMlk5e88+14bzfl9Hiby58QhZiFR5XGLPyk2Vyp52vMAiEA2ZDp90c+o76j40Q/PB5m0oSb8J6gh5eZHrOgwH7COTQ="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.37.1_1566575750890_0.9377617790163195"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-pre.0":{"name":"ipfs","version":"0.38.0-pre.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.1","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.2","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^33.1.1","ipfs-http-response":"~0.3.1","ipfs-mfs":"~0.12.0","ipfs-multipart":"~0.1.1","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.0.4","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.25.4","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^1.2.2","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.3","form-data":"^2.5.0","hat":"0.0.3","interface-ipfs-core":"^0.109.1","ipfsd-ctl":"^0.43.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.0","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ pubsub: false, ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","gitHead":"6a1cb4c4d4e91709100a409eae9ba2d9ba4d77a4","_id":"ipfs@0.38.0-pre.0","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-3+dW5tdmpWmPMtiglNHRkHuom8ahLaIkwU4x/JMYfXLeuvQcLkGwZTIj8iXvrc1IsNvt4TFX5n2j1TCE1e0B6A==","shasum":"9c828c1ab70381e00637fec27eb2c10c22e028b6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-pre.0.tgz","fileCount":271,"unpackedSize":25596659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZPcTCRA9TVsSAnZWagAA6ukP/iQXjmTGLjT7K1w1vQwN\nR+QcpNFGJ+x7r0oXgAyk3sceWmeGUQvNsDEkzY80B+EnOyH0ZpXwe+oXlL4K\n9n2ewQGepi2hfiUy3xYyp+JhDJODrmXeP83xePnSge4VFsbjSkSEzQjosk+z\nm6gIt+oMcX1kCpOcsykg+vKi/2eDBub5aRBG/D/c3YNQzxDbUeuPbGzIiKyJ\nSrt8OGZtrNSJ0TPoc/2K+UgG/i7my4FyxB9GDhxO+h0LGVE1CKiMBSEEaKmk\nbP1i86a56T8163lsdG9xleWLAHqWrLZr52yXmOBfh3If9v8AyWo5Gu5VfSKi\nP3D0dmICM4qsOaJUF7DMXrtp1BUtX8SjCO8MSmKyEkV1aKgF5Yo7VqL1J7dz\nR7mp7APhIgNtn5l7hjxj/0Flyoll4Glch3lbk71UvQcnPkwpQup6xj045bI2\nxyS0WMUWW8ILEAryEJWB8y9fg7g2VdCh6bGN2+38aF4z+gpdl4WImAv64z0c\nEzErAG9ZIGwQpalI2t7M286rPi6bWmFbH71fD26pZUprZToa0Bv+ohT1AB6c\n3cDBzjSYZYHaGjXdzd4GeTVqdZ0yxIpr4yHMRTKCHhmyd6t3Fb+HCs3qmWBg\n/pzn+UF5kturIG1DcsGl7u4Ks38ozc6fRHc/vfivgubgGPbhySdw6NwzinnD\nhpot\r\n=nijg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBEynT/+PMHc/fudLT4mCNCAn+ZHKVJvCm1aJmRC3jBNAiAyI5nEphvu/MEnPmlMMQ1wwJZtsvLjcVc34C4dTT1UbQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-pre.0_1566897938624_0.7449639927832068"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-pre.1":{"name":"ipfs","version":"0.38.0-pre.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.0.2","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^34.0.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"~0.12.0","ipfs-multipart":"~0.1.1","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.0.4","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.17.0","libp2p-gossipsub":"~0.0.4","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^1.2.2","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.111.0","ipfsd-ctl":"~0.45.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.0","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `pubsub` (boolean): Enable libp2p pub-sub. (Default: `false`)\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","gitHead":"4661f83a88e0f9fb2517800896c23c0203c2710f","_id":"ipfs@0.38.0-pre.1","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-YIcZQ13VPm9oPUOUkggREC6lwEfLMFbYdzCM5JOM7QlK5HrP9uVr0qPYUYiWxtIe1ilwvMmwoAQd2UcsB7tRuQ==","shasum":"09b32c63d6e037d05a01cb5713d7ee9d910cd237","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-pre.1.tgz","fileCount":273,"unpackedSize":25554136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbYTACRA9TVsSAnZWagAA8vgP/ilHV8qlnqMFSHQ7LSsf\n6wBu1SDAILwfIe5fA2TcUxB6QPvzDB606nD9/CVDUseawDVKif901A6K5bHt\nUQOSxieAD0X3q72Eou/HFkemvmaoRfJPCpm5ogddUk5C+fBrkflWG6LNVZPu\nVaoZY/yIJHWc98rrCu7BxCd/leIMvsd3dMrDB8N4wNIHIBA0/0UhAtaNYK5E\n0oAnI09+XilDbTgT1iQW8LlSesQjwfJ6ZkK3rE7ZCFCO8LMcGOjM1o6PActb\nSeXVJYe8Eg48jynK2olXwnTVb4ZScJisYuclp0nBxnPQb5iuATkvhKsr8Ba8\nqo+wOxBJdwNGh2WiYQY1BDWy27wNqQxKPaweX7hMdtNiVroYoXH00lg7bwyo\nx51/z6xPYTUKUPJ9/RlE5mGCOr35TmkPqrLK1WYQfrfyFtH/eDkvOKRN2sTA\nSEO/hcQs8XIqyXZ40/S8w0Z25/A5cfXrnVOZyQq5WJzaRIUYcCuElk9Y0U1b\n8fDpFgcMNQX7Zj17ToWjyc6OsmBGipiHWe92CbeOhTPnMR7TpjEWpSRsoGGW\nYyfPe2TxlFArxouAsuuoZl4B8NkPOl6zbWQaKzhfP2N/HuwRXKEYB6yJ69ma\n9zRq77ETV2PYjb2MKjnPwYQbO9nly2gUu/ziq5qROXWOkDBjBzv3PUkfWcMm\n+HUQ\r\n=Te17\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElJDo1zYrMa9o0X9mwq8Mb9Nn0fV6piMaCSJYpmF94/AiEAmsVY7MgIrQtD/tOS3FId3pRgXCoCuBHzltD9uvcBvZo="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-pre.1_1567458495868_0.7438078334664697"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.0":{"name":"ipfs","version":"0.38.0-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^35.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.2.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.2","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.0.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfsd-ctl":"~0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"7086ecb8a9dec3e4fe757ba532a0f680b6437252","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.38.0-rc.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ggToSVdUZwI5xnxRcpW/tO03TGBgCNgNzkB7KOMsry1IltSLcPw+9n1ELqmPf6Uq6gTSsABYBKQjY6Ql4cwscA==","shasum":"b0d52b1a96a3cab7f91eb197e1e412d3a56ea064","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.0.tgz","fileCount":266,"unpackedSize":578432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddo7fCRA9TVsSAnZWagAAzXYP/3GkoZDLjT7Elbbx5Pvh\nvXDJE8hwwxQuqj3T6JxzCCfZJiElVRABZLUorJF/dcfacdOq/mWiNYJsCR1Q\nrBw4AlMOXN+zE2VwAVPvjQ9XMHPkb1RjzVKziMRGwEPDP4J42xaHyWCxTxJg\n6dugG8+bIh+0d5sNBFM2Jbt6d+FUjq/8zk7+ilBSR/akQxh9CXf+4ycDsleZ\n0ZAwJbYUiINzvyAzGE6we2gb1AhHZEK1LTFCnDrIwaXggSboV8mBYEx+8Ip3\nHHl4otBc+Piyt3+EoWKxxcFGYipaGqly560LIS4zjGUVP3rM6CGsIp38Sxwy\nXMoryRlZrdQNN2rLBRqAepVwcr16WKVMsBrvELTe2YzhUH11NwPBPtR+4wzd\n07qdSMRMT1kG3XH6PmjHXyBJYnVKJUlBFZybJjgr8WVD/nDLNMhSaw8PIBTe\nN1ehr6ackab2L8vc44y7B7Y+rNcXAKPl3uW1WuiVV6GtWOI0LeVApdeMGE9o\niabbog/jMAGQOHrobeLl1FKBFetZ5ltYLPvXx0DAKU1Msk/oMMRwdMF/4Dms\nkUB5rOcHsRszkTfXf/aXBQTqgJv5asB0w0BdZuWkyfEgxZpTj9BJHSjRLc4d\nxIDo8+2o98s7/yCAM0pVWLWHBGMQXxqUmhNWg534OaXHKjH/bZTn6lqeY4jr\nvQlI\r\n=M0Xx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID01ZbTVsVvF6MLM6MGFzc8onAFweKPQYQWAGsMuPkAdAiAlEjUqF6+P5z02V+E+ZWGXNVowsTnYw3Q2sJ44kHC+uw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.0_1568050910387_0.48035144060965096"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.1":{"name":"ipfs","version":"0.38.0-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^35.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"~0.2.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"~0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"4c0c539b844429f422444140da5c36f834601e31","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.38.0-rc.1","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-Jiw6RBwtSvxKshr8FPzPOQwUl+Hw+3MIjbMCMMwYD//JVfcIEA+bvSW+azltSb/IMXHLTfyEwxu7Tksf1XAz5Q==","shasum":"01a4abf9fb760c8c49d52749e0743f262cc2ddbb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.1.tgz","fileCount":270,"unpackedSize":25775230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJde32wCRA9TVsSAnZWagAAHg0P/iEwjNhtjLR5+WbSDUnq\ng/B+Bd18XqxjLIqQ+ss3zOuB4setQYvrVP0a7e6NyN6zEs5IgXkBoPaDM2VN\nBoklIi8pWu7XdKZl/3jrZlu68wq6NrSgBpGLRHiTQMrOGFdNTwX7elubGJdw\nrwKeNEJBwW7+ZjYoSh0lgtRSFYpR0PHZvHG6SBck/9Fq1yfjhctl5xF9WlDV\ncg9Je29D5NCwxYxIwzZwQ+xM0SZy+4GugNNw0P78aqeEJ0/0S9yyZqg9QC0J\nr5R1lA/K0ZgiuFzaAbhnRCN4QirdhPSv7pzHsIEKQEqNMze9bj0UkM2tXKAP\njBfeSwBT1mUpGYX9aBusim9WDA6E7fhFI8TXZ3VrPgKFqe8bHDzTyRQIv432\nOyH3cUDjFeZ8rpWdrtu1l5EyhNuILu6pQ5w51t+z/4GqIJkwTjGCMt5vOXQz\nJ6M6fUiMFxhbke9M4588ZomA4q4LXyOABwlAsvMVgOqn9E+5LQUY//hHqPj4\nYWaEK9lImHzceRCl+iKLfc6Ay6geFd0xGaYyj121NlJeVUSvjijMBt5xB3BW\njWmKc0R9YKhsl/Ygv5oo9IfAzl4PMZzIC6bwoRL8HXT2rkjxCxdxmi/xtTZu\nhsCTS+Fikc/Fksb1bQEsfU5jYDugmXda8WPXegBB3hqUed9LvazTzYc/mL79\nHxX6\r\n=TQUS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNGHGUajSVFEPDMpIDZbW9/5+6eMHs+IoTU/j5SrjChwIhANSSvCF1+W/LCfcTHGfdxAclfPMzpoHZAIbSdloEsJwj"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.1_1568374191392_0.1433586349064344"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.2":{"name":"ipfs","version":"0.38.0-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^35.1.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"3aaba81aeccc818c6e7d4910b50e6c9a6210e613","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.38.0-rc.2","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-dTQH/9+F5b5+v+ZclJQDXeqj0AxvPc0HkEKG3bep/GKjXsvkUvWi/aBp6buxSX5tld8XAp6E1nUhOYx/7jxm9A==","shasum":"cf858053984a8a69acc7942cf1e8ca05a6816d52","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.2.tgz","fileCount":270,"unpackedSize":25775357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf2YACRA9TVsSAnZWagAAZdoP/0YunCJyI7SRBUnzXFlF\ne9ZLroyxbnhcxxMGzdk0e6Dq7LsH7LWPXg4uwKoO0/ei+tGHuLWIAvm10omk\nNaJrPYwCGCsNTMvfSnLcGxeanqdAqV4di/su8rmv+P8prykm5gdELISYMMda\n/Vv0tANzgIKlpGi8NdGThOkCm+cYL427YX8vTbu8ksoEtK4lukk4OxdGFGoA\ne8FXW3O3f1AheAIzVjJNfVH9tScBG0Nj0GENW+0lx16tMMMgUKTB1TBkkFh3\nZV1zD7xGuJKYkMCBhCg0g7WFWgKNejTxtpaMeqnkHeaGOlTWs908czwX4VFf\ndNQZbhWvlr68OsZ/OnRicrJuYexRAUqCP5lHEPxtAP9djZN8AEjxUO2C0SMO\ne40sR26zJlcoCA5V8cjtx10RfVVJpTHaiMU46JZMMqm7QyL6iZJsTLrOrmB9\nMfe3P7s0D1pEknXHUjP7HvUeuojjPKryE7WWbF1TVE+7B8ub4p0K368fxSq7\nl93/gfVhkWtmNYVaNLcXczWA8h+EtrZ5i1oe7qOdgpWyGAUvIgu8iCFmJ6ev\nqZm/SWczjdv0UMy2SVe/2A/bHvunB5++NWfyw7qSr8pcQlDqz40BNCx3d7sn\nlYOd4copA42t4fDYwpA/oWIkT5jFzCHXy9ptsNNbABeY+v8hTNfqCbG8mWBz\nAEHz\r\n=H1ju\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFANIyJz4l0bT8RbKqPvswO3fFfWtIiH2erfn3m/ohhmAiEApYJlaG5/F6G0UZTRHR85Z7BcL4FSWalkn4hDSm4Qn3U="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.2_1568630271447_0.8918478140410211"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.3":{"name":"ipfs","version":"0.38.0-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^37.0.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"d8b2b833ce300c6d2908d578cd609d4780aeefd7","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.38.0-rc.3","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-2VOfzjEu2JiFkb5fAzpHW3MgG2FprhvvvMxAS3+OppDPOA3CA7DawjlXiFmU4WVNE8qkVnzyS7nzqRMA32958Q==","shasum":"f65161b801a6094f7b039ca452818afeafd13c29","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.3.tgz","fileCount":270,"unpackedSize":25775485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgU2+CRA9TVsSAnZWagAAvC0P/AtDYmptfH71bzS6a37s\nqUKqUgCPIN4D7BpSxahbprzwJ9LPD1Gm8sXmjWjW2vpH4iR3NUrDgk6PFxXM\n6v/YKrp4fwsDvT+y4RNvJ9px6RYbs2QWdhoo38TloxJWDh9KjLlfs6Ez+lSS\nfb9r68tzWXfpzQ/0Dz5UJbYpUeYx3FDV6ChW4PQEOx9/N3oDiSXYjrMlNdSR\npbI/qWns8SZbEpPU8k3HMzNd98gd47xjU5Fyfg1YlNPH+XaqbF2XHoKEX/p3\nUi+qy+8ulTNNYTw8NHvgo8eKRJMA1YXCc+Q0oEktm/3tFj5/d9wIPKtY+dqW\nCdDawVk3UMdvGKj1juve2FvUZs8+H4sOO1geP8GZA1jV9rYkldKoopZF4vC9\nL8InuEBr75n3F6pLYgAdfmf/4bUrcRvbYRvtl8PrQ2AtDA1eFQO/FOMLymSB\nEy6dKVhcs4g26mM7qnxATK/JXJq9jsvLBx7A0cJPjOUHOx9o6sKeo4iRMh29\nG6x2rozzHtOI6ix066l8jh4YQvObQUPQ6CvKwBY/wS0OXUnu37hXGamo7lnr\niBN3fL6nz+gNh1BhJoSrRUwFbDZmkALGOFXKexiG3Ir0n17zty6nsaA6rYcG\nZlC1KZCoCke9STPgV/p3O9ufs5rHa7Z7YnDWHpwmnsMQ+yTfE0T4BfUZankl\n5MQJ\r\n=LUoz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9mJH14reByHckaP37NjFDvQczWngRIoh/VbBZYp2BxQIhALVN+vg5rWK9jO6g1YcP55S1axoMJjFH+/IjF/CXP2C9"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.3_1568755133044_0.9466049758506763"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.4":{"name":"ipfs","version":"0.38.0-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^37.0.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"a1fbf7096b10bd0e7274230b25a183ed25ced5f3","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module (use IPFS as a module in Node.js or in the Browser)](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API Docs](#api)\n    - [Constructor](#ipfs-constructor)\n    - [Events](#events)\n    - [ready](#nodeready)\n    - [start](#nodestart)\n    - [stop](#nodestop)\n    - [Core API](#core-api)\n      - [Files](#files)\n      - [Graph](#graph)\n      - [Name](#name)\n      - [Crypto and Key Management](#crypto-and-key-management)\n      - [Network](#network)\n      - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run Tests](#run-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - `ipfs.repo.gc([options])` (not implemented yet)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\nRun the interop tests with https://github.com/ipfs/interop\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.38.0-rc.4","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-d7452E72zHCTTyNJ11TXu5cUq3qzeYwS8AJLPxnZFl7BFf68B4rI8wK669hCb2j9CzIzlZDX1QmX7DSfk81WFA==","shasum":"8fc6b9e90694ea1dfa5e9b70d0f43aac66a9ee15","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.4.tgz","fileCount":270,"unpackedSize":25775613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgWvcCRA9TVsSAnZWagAAY9gP/R2BXWNiYqu2TuwN/hfh\nCk4kacr50hIR0rIHUdW/0MmYQkjvhZlCuggKLserJ1fWvyq7943y0q4zkNnY\nSVuGdRR7QIeh+uSkycKyLmexcVx0UlSSGBp5tvoKH/CdiDC22CviEE2qPd7q\npsVISTauSeGX+WdPrC+E1N2Mtakk1F/uNPh3TEhT5w7vG3AOPZGn53ilONRW\nywc4B2HV8XEzwx8AYdupDUdSfEDEqUZSThlfu6l0T1WXikfUtxVTkp9ZAhz/\nRUujy+u6BUCJIQn6dqu9BaGV4eZhn+XxWd0ch0UtvF7EOCvilxS0NMl+otWH\nv+lpBq1Ojx49df6zXIq4wcsoqWXuhNxownFwyRp7pnUpC66/QI2weleqK7wN\nJJHlfZZBjSO5YAVpUwz+UcyFuPadg0M5jlS2ak+qxtIbTf6T7mTLF0T/25h4\nhATsny/FK6X7XRhNc1f/hY0vODAUlmhd/02t/JSPhTMvUi4eC0I0PaaEO+nu\n6CZmcainkdnfLQAE5Hp1GQbipiUxTsVb9so+tVkCDnUwLDibcsWc0+UnMc8R\niZEE80IGaXTM8d9cwSBxiYvYcTQqT0bOSYqHeEvmQUeVjx6yntH1EoduJLA8\n0uNC2IWW21tHAYfpYzoVlAqmNtbyr+BH+sZd+5RNm2O5cwc+VScq3cxPCsNo\nOQ0E\r\n=0J2C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9Zzs1QSHNEoOq0wV8LqIIGuJ7z+gJwEBTR16Cu9ZTmwIhAL0INpNZAYho5Ck4LFMOC8oClD1NUMV43WVfAhPkGFFx"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.4_1568762843920_0.7777109690601267"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.5":{"name":"ipfs","version":"0.38.0-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^37.0.1","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"1647fe82e2c069c34c2015e5b7606683090df11f","_id":"ipfs@0.38.0-rc.5","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-Y5wl3wAag2Qc1BVgU0p5E2uA0fY5FLmmVNd5uZtNzXAyfPGUX+JmrNUPXlgWSCxbQkzp2jKLiCp45Mb5DrpL3g==","shasum":"89c54bf2957fc338f010d4f759b17e8419458f6f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.5.tgz","fileCount":270,"unpackedSize":25777888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdglvWCRA9TVsSAnZWagAAX7cP/i4OHB0ZspD0wML1TENE\nhXzZ/aS9I763ZDCujSUyO8hWV+RvwC78iVlc1l5Jb6PSCEZEspe62osx1Jmv\n8Qqyl2a0InWilE+Z8Q6IwkHLN40W4qlw1kerzvsbJsHPF54aVmA6hj8NTQBw\nFCyeyQHq5fseyhqJ4PbVCdQ4Q2V86MQcSx0foefVH2HW3pZURLSskTxV9u4r\nnjpf3b1YUpAsoZKKhIgVK89GIw4nIcWaVPtsYVf/iyke5PXnVcBbfeLrK0N2\nt2BsDofDYuCLHVi1JwTW02czMm3Btmc6sGC0GIboyusGe3zVIhP1Rl/5S1OE\nIBxpy48UeqQEgy8qA2q6FdYzkE+Nc/Oo2bTpXpHYKoxjSLQhKAy/QsS9Ei7J\nSSlexhSE9SEEwHbtuXBiiz7aPw/ohJ8nH80Y3Ee5rd4qskzEs6spMBtopfbe\nAlqLv5ryGl18ST+t5Cnu+R1IGFDnhymgo4ydU4KqmzhRXtnY9X7EoCFXx57x\nRK0VXr/WsGCAWNBA1aGRStKf/L/9s01wGZcJx/14N4bdqRimqMPOTWniP6F6\nt6hbTXgLubBdNPXcDriLk52N+4nt9G/xz+a+Dy9piYwCvjMkQqTCMGmCDa17\n8vCx8y/t2sYeB/LyhJhf000M5gCKQzMYBjDEoUnwNe4KBDVKE8m/pm0eCx4G\n9ECn\r\n=/keT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7jh4k1YtLatteo5TA+AbaU6TGbJYRpFGxu8I3hwwYzgIgPbbXp/gUi66MC1tqQzdlpvXTUwSQlgwyKCB1IGpqJGs="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.5_1568824276632_0.4589612964947667"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0-rc.6":{"name":"ipfs","version":"0.38.0-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^37.0.1","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"9b32d164e6860481d4662d2d6828e1e5127369e0","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Tech Lead](#tech-lead)\n- [Lead Maintainer](#lead-maintainer)\n- [Table of Contents](#table-of-contents)\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [Is there a more stable alternative to webrtc-star that offers a similar functionality?](#is-there-a-more-stable-alternative-to-webrtc-star-that-offers-a-similar-functionality)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **DAG** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Data Types** |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n| **Crypto** |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | N/A |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.38.0-rc.6","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-94E3yKTjAlz1C4O2wj99Ctzyzo8FXM42S7a/7430n6yRJS3ZVyYDkVcSwFI8m0qm95sP94AeWOC6r3qMXM/tMw==","shasum":"9c55ba4126c78c1d7e81bdc3d991035cf01ed70e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0-rc.6.tgz","fileCount":270,"unpackedSize":25778016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiykCCRA9TVsSAnZWagAAGYQP/RfHgUFxbcxOky5IpaZq\nJERkXHGq8uVbPInHu3wKA5rGW5txfsUAQ73ORyJiIMODeu3OxorBayiF64ej\nyG1yFE4qeFfVIlnNhteviO2oWGYZl2WXcE4FScE6+GcaJtJv04jVAA9BhLMj\nz7HpAWt2IG6o+8U7NCWxWbTzn2sEdH5ai0glOIPwQQt4wD0BNpKcey9toE03\nfuW0S2DrV48ucQfEfBWmBm27CEUijSP8Gq/YYqAConn9kxb7hSaigtphg3U3\nd0rl+nU22a00RqYk3f3sLLDrC5I4BICwhGHNXW6XUJukwyY3lsGyLNXgBwB4\nq8uYKI6Ckw9lu07BckiKQFGXKtpclbMPsinByiMDp/hpA09NCCCcoQhFOIh4\ngBqdsAfpYB3pjkNLQ44zrvkmi52V2YS+dwKAmSsxcogMYBRuhbodbniBQdZY\nzX6Kz+iRYBocsMN/AysqeOgEskbnP6E+yWW6GQOtlHBRKu+UqtLkctjuMFp4\nTdG4u/XIKCgV5w4hpoO4+fJ1dotGeKPXdQ+1aiIGvSsNataevWZyCoawiwOS\nN+p2mwCb4LcpQpql2KI4GoIKd/5nppK0OlgWZT0G0rrFuzSO/4UKvRuP2Bjx\nY343at6bCfqSKQQtScYosgp8YXp33RLAXrdHhiLvwIGabclXVCoyTI6IOHzA\nt5uj\r\n=M0cS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEW/D+JNls4HVtvhJ2g34xlG7u1/avmggPOtHbgSGfSAiBQYw5O6huH8wRb7zzNAhjjKXk5WgGacrl55XJz2khJYg=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0-rc.6_1569401089549_0.3912873525275333"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.0":{"name":"ipfs","version":"0.38.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^37.0.1","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"6c4f081d75acbc1ed9e1bbb67b49ce61cb816807","_id":"ipfs@0.38.0","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-Yt4bTEqJ32zml6FbTIaEUZS4Wo8MI97Q/fqU3TgbflKln5YEY7nXcr4Y/fzC/2n6jZG7j7XZsP0LFM557WJ+Fw==","shasum":"03f79912ce4b5ebeb081b26e92410c8f6751903c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.0.tgz","fileCount":271,"unpackedSize":27517601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkiknCRA9TVsSAnZWagAAllIP/299cEcEVo5s5nk0xqCV\naNsQMfj2cX8hePUrOUeII9KRkzPvfFl4iM0rpe7Dk2MhTNpqCVpic1ZwHCR9\nRspStQSu5VbLpSHRBDEJE4UyqSmJs5BbYv3zR/OZKnHArc198d7Q/LBloxi1\n8/SxchfsDsfsbnDvIEpMxX9v8tkKHYCgLUN/t3rtzH5ljG1fSmp1PUlbwVj7\nIoCV8YrZqTGiZFw1o2IqLVyIw3V/P1Ia8NelxdywCqtmR9GxIs9qNyVNFpx9\nIQxLntKWDotYCYMWm95OwU9hcGdRgK86ckYKvqMM1vVASz+YfWTdRm6Yc04k\nwLPTOKnQGrlHcmF1j3DwlGQJGGml7I5KZvc4HWHK8ZPmbl+FtCkgQvzbLzHm\nLSji8LP+EaNve2i/0ekQxjjta2hwyyKZYnlDaDQFmvLREMzrf2Z4aH2gQVzE\nDFU2m1YWekO+lpUJtQ9VlBt/ctml9aMMzpUeZxgio0rc9FNe2YIJ+7OXUOF4\nW0FG2qzGGQc5NqhBDYiCriJIBuycFwm0R0eniZFht7t192TmUILG+OLN0YdB\nZfDGinxvUtcWwGb0kvxjWhItsKMPoM45du7YbA4O5E6+nLtOSoQq4RT6O0yX\nddggIsVXUXOoiXU2vSciofPVB8+XC/wp6aykrV7XA+BxHxeHwgcGpFye2iAa\no8A+\r\n=MQTz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICDB1LS1lzbxesbUyMtu5zrDDGgTNmTex1VscxCfshztAiEAwZ49FzrsFWygOhTIs2+0Co82qNOjmEcX5MjHFR64jBM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.0_1569859877853_0.44313385297986096"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.39.0-rc.0":{"name":"ipfs","version":"0.39.0-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.0","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.7.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^38.2.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.28.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.14.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.3.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.117.2","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"b30339cd4765fdb90f9279ec9efcf813e33afb01","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Tech Lead](#tech-lead)\n- [Lead Maintainer](#lead-maintainer)\n- [Table of Contents](#table-of-contents)\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [Is there a more stable alternative to webrtc-star that offers a similar functionality?](#is-there-a-more-stable-alternative-to-webrtc-star-that-offers-a-similar-functionality)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | N/A |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://travis-ci.com/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.39.0-rc.0","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-qM4fBHSzuheZBRaoB15RWi4G1ovYuUqzSr+vmHijOp8XlvHIeDlIjYBRjepxHIfcIMwMI5p8unCXg/BiDzNM/Q==","shasum":"1f07f15e7e5c425820d3e4eb129ac75a00425423","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.39.0-rc.0.tgz","fileCount":273,"unpackedSize":27519148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnGvuCRA9TVsSAnZWagAASeMP/1BUC3YQ3CcUrko+Qk6v\nX9tFXKp7CqEQ6sUIecsxnhnlhL9KMN1/P+p5h5zfhOkgjaVvcwnHhN/XqhQh\ny9tZw+c9U5880X+aLGhQwgf2shjkRNKc+u4Npq6epRC6Wh1ZQBamZK5omEzQ\nDdM8lRyabBE/Z4gvTe92nkIR0htGzRxGLCT0LrULM3BQoWtL1ImPcbtX6Obf\nwMkwcVH2D2r/XUIrD9bUwEcm3a2J3Dp3OKhnJMsQmHQ3ymPvTZ1Lk5JHHZwA\nt9eaHXiC0wnjcVnTn+0cMmha4jSKlTQ2XZnp9Cd3YFfxRPdzlrfuw3g0rw7N\npTUkW1BUV8agnSj1CuLqvkrUejlMvPZa72v3I5CZSMSndycsRATDFI3yV22Y\nFZ09q2qy51iirk6V3v9kgt4U757wQ/L/tK2IM7TJHIEg4GE6exsrpbkvX/mu\n4QdAt2wTbL8TgvNA+5/SiKOvluGr4unVUryn5+7Dy4CH9YGUiH8xgQnBCtsV\nnrD/MY4Bj2GJmXbrBryuHw/kCFLAp0ncOppFW6Xink5ypQW2yOXgbsKNUTzz\nW65+aVyVq6vg6MwnaUubCkjAlsQx4+rpTG/LAy0oMgMOrp/tFHG888d/bENR\nNBfnJlHXMAvEs2JK8c6kDUiL4kwck1yYv0W2Oc1dzmtQihG3lsOfagA7F1Ab\nVI2t\r\n=LDaN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC69RmGeGsMmXW7muWixSJXizXXAN3NUF1JOWA1SZafQAiAeM2OqEWDZmO33inyP2YuLzRVQqxC+Xl82SL85chWAEw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.39.0-rc.0_1570532333206_0.8175962119686198"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.39.0-rc.1":{"name":"ipfs","version":"0.39.0-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.0","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.7.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^38.2.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.28.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.14.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.117.2","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"fe43d73657c087342d509a4ea02364db6575ad88","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Tech Lead](#tech-lead)\n- [Lead Maintainer](#lead-maintainer)\n- [Table of Contents](#table-of-contents)\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [Is there a more stable alternative to webrtc-star that offers a similar functionality?](#is-there-a-more-stable-alternative-to-webrtc-star-that-offers-a-similar-functionality)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | N/A |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://travis-ci.com/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.39.0-rc.1","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-7rk6OrkrZgCdhKk2N3QzohjP6HbQOIkFAhIXaCx/1Un69g/fSqJnK0ENobjd7JWv7NqpZW+PzBsnPh9/xD2CUw==","shasum":"cba2878ab11407d44b77e6222b4a4fa4af1bb19f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.39.0-rc.1.tgz","fileCount":273,"unpackedSize":25629346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpdPUCRA9TVsSAnZWagAAgTMP/34cQ4KAvz5JtAMN37Wc\ns1weIvNUGEoR5w2CKVHZ/+P26hKZ5bld6jAzlK5mRSVvJdTEaniK2dXKtAYU\ny8DmFecVI+R4PEba/oem+tDMGNbHCeu14vGI4H+DrISooqylfe4yW+7XFEkV\nIoLthJz7gvQR55RAvPIJHiT/QmsV4lrlObRTu9nCnP7Ao+BKjhBYPQtPdqkW\nCI9dA9wtSL9/FwhqzAWgF/CA/q/pnWxsKGusa7SHlMydIdJ0HDvrm/u7pnAx\nTiWRdgR6fCLxHbsKPoQx83DYaGB2Ad7ZJ4q+FODVhQ07LRroFm0UKfYrjRSi\nmn6AjokVQGyzpCBMqsm/ZoqOrY2y8cive5ClMWddlFzbHXSdnUvKhno2b2dZ\nfXXZgf9cIVyXElYAszNNHYlLCXmTu1AX/RbyxzLdqRxLnOX+7BgvAQMqTbCd\nHBPzoF4hkah1H0Ym8kWt99IUTcWUVtKxpTH3RMcsj0fJfNadiUUP/LM3u8fk\ntt06E1WIZqH4/PdHO6ALSJMQw02cMJvOstZ3GRxzteJx/fHU7wCWyhl5gnl1\n8mYjtxtQVUg4L1qqG6A1hXjEiHru2IAf1umkCeLJBYSHBMdTSwMxnrleykLZ\nRfhds572ZBMIrWqXU1dE7Emxj8rsbvM3YLzHmHQvq+1lkAoT3AyZRZNyEH2t\n9FSX\r\n=xuFU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3UapKaxFVndXtqc0ejpNdZygf97c8P0hEx66MnQPZrAIhAL9+eFd34KgQk26ORBU5qu53GUqlLcTmnjlrefHcQnVv"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.39.0-rc.1_1571148754540_0.8567927254638659"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.39.0-rc.2":{"name":"ipfs","version":"0.39.0-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.0","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.7.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^38.2.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.28.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.14.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.117.2","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"141169d807df3499aa9539f518781fea85c670ff","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Tech Lead](#tech-lead)\n- [Lead Maintainer](#lead-maintainer)\n- [Table of Contents](#table-of-contents)\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [Is there a more stable alternative to webrtc-star that offers a similar functionality?](#is-there-a-more-stable-alternative-to-webrtc-star-that-offers-a-similar-functionality)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec`](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file doc](doc/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | N/A |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://travis-ci.com/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.39.0-rc.2","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-VPqE5FbXxtbKCNwL1h2AMU1g1QX7W6nyMddcaIXVNuP9vogFRS5/smfmi+NK/lN4bq6fZPb+14w6WYWqmIm7Kg==","shasum":"5b9afc1f33bdb44f5d02e60929b72548a4c108ed","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.39.0-rc.2.tgz","fileCount":273,"unpackedSize":25631216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqJuVCRA9TVsSAnZWagAAGiIP/0Mm+fWQ0SfmtyJR51rE\nZplCg8hgn9Z+U2wqKFjk/vxKKqQlyQiseUv8PN8Ue6wXytLC9OYOiIb6xP08\ns07DGnEz9l2fi+E6WN2mdJcxE8sX2u72722HirmDvKEUNzOtKEvssQiKX76V\na6ppGglLpuGELv1AX9Eov6vlgXBS8NxV1xzvAY1lYB7t6SRQm87VqzYuBkZ1\nOUhtWIJYWGBddTCbtMQoTWSQke6QDRXJXfsQLWqHVzEL2WueEEDNkfC3/Z+w\nLWvsysBE8o97nrwH9KruLdkk+LEKOrBKLW5LSjW1x7otuuAlm2XzelpWPhCf\ncsAQXdfZ667l1PWH6xyCLJKCxNpj4kynowNCV4opeiN5GtPP4iyaw2Sb7iSh\nVIEo6s5/HTyBMFpEhZj5BUygZ8kEobrc/ZFptzGbFPVEMHCfqnqLVxLt+yHz\nfP5K+8AaTss3iuplR+zQbS1GPXpCr7dbzUymjyCakTB9bGVxZckmGT0N+FFT\nBT8A7DRB1QBdEzvxZdRMfJ3rzc4rOxtiPr63dV6A8n1ApYoTWlocXIn7NMNQ\nbl3X+jSKFTOZmKqtV6RKWBVxQGP1uY4WACtybs5xR06FDpt8dQBsdByVQZpS\nkepOv+RMxHXPumPGYzETx87vEb0PmUNpC/N7V2Oce+JeVKXZD/xj158vrUsQ\ne+IL\r\n=i5wf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvhxwefgUKFY4j1o4GSC7wCoMCfURATbxqp9KosshJuQIgaS+3ydrE4pcZb8EYbA4oQw+kPPLkN0xPAFFh/iitM7c="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.39.0-rc.2_1571330965013_0.607305297226189"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.38.1":{"name":"ipfs","version":"0.38.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/fetch-nodejs.js":"./src/core/runtime/fetch-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.1","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","datastore-core":"~0.6.0","datastore-pubsub":"~0.1.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.6.0","ipfs-bitswap":"~0.25.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.15.2","ipfs-http-client":"^37.0.1","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.12.2","ipfs-multipart":"^0.2.0","ipfs-repo":"~0.26.6","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"~0.37.7","ipfs-unixfs-importer":"~0.39.11","ipfs-utils":"^0.3.0","ipld":"~0.24.1","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.17.4","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"~0.5.2","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","just-safe-set":"^2.1.0","kind-of":"^6.0.2","libp2p":"~0.26.1","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"~0.16.0","libp2p-delegated-content-routing":"^0.2.4","libp2p-delegated-peer-routing":"^0.2.4","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.15.3","libp2p-keychain":"~0.4.2","libp2p-mdns":"~0.12.0","libp2p-record":"~0.6.3","libp2p-secio":"~0.11.0","libp2p-tcp":"~0.13.1","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.0","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"~0.6.0","node-fetch":"^2.3.0","peer-book":"~0.9.0","peer-id":"~0.12.3","peer-info":"~0.15.0","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"~0.1.1","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.1.0","base64url":"^3.0.1","chai":"^4.2.0","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","dirty-chai":"^2.0.1","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.113.0","ipfs-interop":"~0.1.0","ipfsd-ctl":"0.46.0","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"27134a9ff16159d884ec5f4cf310d18670512c89","_id":"ipfs@0.38.1","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-acxpMc+5E7SQ/V8bBeWmtIBuOlRqoa/GVRvQj3rb0ZZ5Io40fiTmKBsJU8aJCSOa5TeZcuzc+jDpvQgp7WW+CQ==","shasum":"c1c0c22b2ff8b8078bd935348644c92848d5a8d2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.38.1.tgz","fileCount":271,"unpackedSize":27519227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqZFxCRA9TVsSAnZWagAARMsQAIpTg6J4cY34NuW/a/Fz\nPpRKjfJrofjX+Y/5dnG4djrKMcgAHcoaofDuR2fBLndJtw+Xyj2X9Tb3fRgD\n4W0+Q9UL9DfrUQJjjHuiiywIzvrW7CF885U3cYHUeWugvbG+NNGz2E7gjl94\n+40qM8VVAXjoXK2qq9F+O5kDOBjoVrKKRGo8WLHtI6WYo0dRXp/DgSplW8gH\ni1HR+L3nqDZmB+yBuJ1ocmoMbBVBo6ZX0gWh0qcXce244Whf5W5WsPfYu5as\ni/DHay9zwb0JycmtLhIbzi+RnBJ/CcKJ1xWDc+wig8wVj9/kw6o4UXwqO5ax\nMbCeLUJL5QLR03uGh5syhF9Mmz6oFmYne8Lz9LQ8w4w7wLs+7K1Q9BeIzidh\nOjMWtbg8fO2VyK85Abqmrj0K+UbjKXlA9Pjs6gRsCq+BxiaZfcyK2N+nx2AB\nFuWUQzKxRHpYcKBILutZvMLOhC/WPQ9/McplPy6ntwyiBJBf81qunc+JyZrg\nxmWusIFwOD8BtqcWc5c6+clxAba4gp6q5V5NOjChox9FqmiIa/uX5t5IyCz5\ndLyVU+f3DPW+B5WoMr/gHHgncY4FxdmWXHpZ1fk7STOQDrBAryp/nwSxn+cA\nF7NrORPmO+o/f29WowSfciqpnrevFLWlWujwEh3SdGQJ0v62ctoRLs4EbE45\ndUa5\r\n=VRi/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGyoIMNiL1zSYL9piLvdkwSFa/eH4QCdmAYZIa4EqgaGAiA0JZ3avEk6XmUpQBxwpOI7dB6EOXONSMsihK99qEifSA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.38.1_1571393904452_0.0516157703696829"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.39.0":{"name":"ipfs","version":"0.39.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.0","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.7.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^38.2.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.28.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.14.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.117.2","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"2454a7ef4ae743770532ec4df030d683c8a8d4c2","_id":"ipfs@0.39.0","_nodeVersion":"10.16.2","_npmVersion":"6.11.3","dist":{"integrity":"sha512-x7Xe1IpX8L21rnBTCFbnAwgrfeL2kUSOMzShuyD2de1Nhino88uuKMyxNcibu9K+K3Mm6bToPNnRdPCYMPYTQQ==","shasum":"ee96c34ea6627c69613dbe96f27e3a5c97e90fe6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.39.0.tgz","fileCount":273,"unpackedSize":27421269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsEtHCRA9TVsSAnZWagAA3XQP/ieRef6vqhsIggv8l0I8\nZLg01FULamF4smr8InmWvL+mzyAxjG9x8GDtasa9E9BWtxXZKAEWRJps4CVY\nvP1Zw4RvYv1yuRrPTs3fOydcDHum/kVdErGcFKSox8r5/wA4TWgF/mTh1t56\nbhkJQpe62sT60UZG99WFZ/mflLbdOMUfU2LXYAKyRXqcMkVqnkiN266KAGRs\npfKOHsyHRkj1HN4IoojKOEQRB91eNJzi7FlhY5GY5zKMFM6qkkzC5VgREun/\nFwMY8m4fKsk4gZzSfNR4zz+8cmTAMmK1oQQ0s6Cd0K8NvHJXAqXiAmNIStDV\nbci0TCCJBJ6/kS8U40dFs1rCFlzgX0kOb8wPaKE29ply+hybEOUWc6G4DLTv\nKb9VYlH7LYFwjLF/x/l7uB6Ly9CFq5944kU3n4VZBt2QaAo0yW4ojDhVvNxq\nkQnYDqdRLBmO1+CwWQ0GbI9iKGYxZlBb9VVOhQLSP2RvYicCpUWzoe+H8GCx\nyvKbJMQGSO/O3eFIL4wrRv4a7FhJj5BJ6q+0/exVnJ+PDLZ6DzQwlwIABC3L\no5qu1BwCpt25BGVwAVwt3kam4lPJ6McFUSQJuxrSY44HpJskjlK+phpt6AOC\nSIsVd8yHHcJqcCS+IjkKUWVlOe1857jambS7y/mf28FsbPb24wz6muCvEPl7\nfO5/\r\n=mDqw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICFLGeFPjsmvKw+IVtXbamnsWj79mRMh7l4mM9ojp/6TAiEAoA54OuNTW9e5nWOXAisq9K0+oL84hQt0mLZduXmw8i4="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.39.0_1571834694826_0.7099958261451844"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.40.0-rc.0":{"name":"ipfs","version":"0.40.0-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","array-shuffle":"^1.0.1","async-iterator-all":"^1.0.0","async-iterator-first":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.0","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^39.0.2","ipfs-http-response":"~0.4.0","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.29.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^2.0.0","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^2.0.0","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","async":"^2.6.3","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","hat":"0.0.3","interface-ipfs-core":"^0.119.0","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","lodash":"^4.17.15","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"18e225380b15ddc0d8078a173243407ac71fbe3a","_id":"ipfs@0.40.0-rc.0","_nodeVersion":"12.11.0","_npmVersion":"6.11.3","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-+ELZrpxhzxv+ZYmpc9z245qbuk+ozRJHt5r6Dkb2C5BGrUhEzmF7vuT7wW/BDV2SwFX2yepdtFcHgx7+rjgakw==","shasum":"c40bef7428cde886a082eda091e0935f51ec21d2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.40.0-rc.0.tgz","fileCount":283,"unpackedSize":24857429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyXLXCRA9TVsSAnZWagAA7ZoP/3g1BjA68YZqKzKwMHFT\n5ak7K1YQKVxy2YCI0mkknr9faU2MjOId+uKghjV6+YOPKdY6DisyN6KrFlqB\nHoVeDF6B881Xr7jabFHrTL1iuAbT22ss6IZCZ3iLo5yfeUnBBTLE/s7WdyIN\n+TURz9yrPJmQor05lm8qBUskfU7qGzjSmkVu97Z03Kv+sGB6uMGXzuWodahA\nK4bcAzHovCj5JYLF6q7iZKE/Oe94JqoItp/P5BlqDE+bo62Xl9AwNEz19Oqq\ncmV2QtRRkDnFBXcGoRhaIJsLsY2bjc7lJ9JNzMC4DfiJrxSw0mQ0KQizQ8/E\nzL4/wRIlVmQc6ogFIMqWkR6fjSLhpVHASNxIoaTNfYtjJ1JC5/H3fcL4BMCi\nAuosDXwAMteqfMhcyybUBL4CAVIPn7wOGypX6Xnx+A/e/H6+yP/RSBALDM+N\nmXuU2Yzbb3GRs+Xmtm8XWZGQ7B/4XF/c/VoCocLmgOEukqXW1FgHQSUPUr1+\nFJvkBkY1xBaWleuiNfT//UvPG0dsQjOgv7egQXoEvx2v0Xzjd2TTXBrBrFaG\ncwUusMUU1UQvzrU8kTdlCSttw5Eu62pzUVA+tzGs3ywVXe3XyRJRTHgCUpII\n7832zH+Jrpdbm4NDb5sHiGpQIdKdXnPBIrfkMiFXUqGHn4+0E/CXb1T+pW+c\nMjaZ\r\n=gZ3M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG02Z4fBoZ6BiAglZ8vAgxgSF/+vXVgclWsDbUhZJcMsAiEAwVcT/fv/E+h12n91gK/8yk9qwbFewcMRLB/zq2zJ3AM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.40.0-rc.0_1573483222453_0.0432686703669658"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.40.0-rc.1":{"name":"ipfs","version":"0.40.0-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","array-shuffle":"^1.0.1","async-iterator-all":"^1.0.0","async-iterator-first":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.4.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^39.0.2","ipfs-http-response":"~0.4.0","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.29.0","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^2.0.0","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^2.0.0","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","async":"^2.6.3","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","hat":"0.0.3","interface-ipfs-core":"^0.119.0","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","lodash":"^4.17.15","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"e45e5b213c5456a81803a04271d9b490ace1573a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha`\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents\n\n- [Tech Lead](#tech-lead)\n- [Lead Maintainer](#lead-maintainer)\n- [Table of Contents](#table-of-contents)\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [Is there a more stable alternative to webrtc-star that offers a similar functionality?](#is-there-a-more-stable-alternative-to-webrtc-star-that-offers-a-similar-functionality)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module `package-table` with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-engine) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-engine) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | N/A |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://travis-ci.com/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://travis-ci.com/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://travis-ci.com/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-id) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://travis-ci.com/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-peer-info) | [Pedro Teixeira](mailto:i@pgte.me) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://travis-ci.com/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://travis-ci.com/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://travis-ci.com/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://travis-ci.com/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://travis-ci.com/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://travis-ci.com/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-mafmt) | N/A |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://travis-ci.com/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://travis-ci.com/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)j\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.40.0-rc.1","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-GO4iuK1c8uHCtZuDX6uX3KEFkqxro7g4YCK6SBneAV6uN9mRPrJe6s2MF4LQgUvzq3UHcW6FPr2BVFUpZ4VpDg==","shasum":"eb95c0c3c7119d5ee54ddcf861875fcb17d5a453","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.40.0-rc.1.tgz","fileCount":284,"unpackedSize":25882374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd38UuCRA9TVsSAnZWagAARsUQAI+VVFozDTTEVwIRcSN1\nZZyCPDUfSFrVsANju3JXbq97mIvhQPXfAzCkzdxIA6LvyrNzCtioMNQiRWHY\nZ92YzRhaVC2nqsxReqbRO8ClwVs9lh7MXuoDKOiVorWVKZGnLc2MYmVIn31A\nC6IHhiIMinXGUqM5DrONejh0KvWMECS7HJquoWZ7VRDmYfqv4bAvzjZQKhKY\n2P2en37T4pzhn6GA5HPNBTc6mzPyFrpiVVIvjx2jhp/vS6SctsCInKWC0Krb\nqIOsHun7bCfPt1AvRDWZ9yxlnNkX4S7bwvisaAK/fOTVHreKEbvSx1hO+dNI\nsfSQnlJ6Tp6yx4Aah6nMRC5lTgx39BAVvtgO5voyO7a/k2iB0jAZ3vqJXBWc\nEaL1RK80zEORIwjriQjSuPGlZXdBo1LPXoMGqVKHfgsuhVRkxYfJOuUwz5OH\nRaS/05caYTFkqGwlbRy/cH/61ygqSoBQaWVlO19ndlKC/thBT+6OEe7suS+z\n/a9ffycraOxoiDUbVsyzMONTCDuefSNGBJkI1c7s4DK10iHprPX2kEhmmJHK\nT3aywtC0+maRU3dtXltRUeI0jd/amppA2Va091zD5x0b+YKE3Luh4366LdE0\njVkS4n7UWPvcmfLGlbWs3XVp4J9nbW30i8dLK+0xaNHjeFGRzW9fFppSmiwv\n+e3k\r\n=9pId\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWh5+xEhJkiAzm028yBfCSPP9v89ZmC1frmMAnZjll/wIhANsUEiKOAE6PAJMaa3Op218sIIHMuZSGVWGbOgYDPK56"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.40.0-rc.1_1574946093795_0.3425865728052615"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.39.1":{"name":"ipfs","version":"0.39.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser","release-minor":"aegir release --type minor -t node -t browser","release-major":"aegir release --type major -t node -t browser"},"dependencies":{"@hapi/ammo":"^3.1.1","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","array-shuffle":"^1.0.1","async":"^2.6.1","async-iterator-all":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^3.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.3.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.0","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.7.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^38.2.0","ipfs-http-response":"~0.3.1","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.28.2","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.3.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.14.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash":"^4.17.15","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^1.0.1","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^1.3.4","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^2.0.4","form-data":"^2.5.1","hat":"0.0.3","interface-ipfs-core":"^0.117.2","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"b95c6ca5eb6c21b13c85c2156ab0250c5f2c61a4","_id":"ipfs@0.39.1","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-g0Wuo6u8DHgh+Ua5KUGOBl+a27q98dMzBG3pdtsVKGD9P9HbXvFMeZO81zRgtotjk9mdO5I/cOuIX1NrWV2VWQ==","shasum":"616d7eb04fc6f5d18aa7478d32fea8d014834d52","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.39.1.tgz","fileCount":276,"unpackedSize":27463693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5RjDCRA9TVsSAnZWagAArmcP/0g1p7u79hzsCrofEILJ\n5XPl5RXUvN0vWV9DF66WOPQFqesk6z06n0/Q5Z3L69V4qjjG9UQJi4kKW/d6\nnFTsnV4ydjgrIBONOrgrHBIhV2VAd1EITT4T8yP7Jw503C9j3xz1idyy4i//\n1k932eqfiQ43r6OOw9XcFS6msQblRa9fxieUIeGcwQ7SgMAy1t4KDOMRRrOy\nfiOI+6Pvx4DuKUZ70uh1q+5EyiZBCAYf2O+PNZld0jEwCLNuvi9fusKWNVqu\n9fbnYPOCFzM5HN8CgZWGz2Gu9GLi5jqxqlu/MKbfO8zaGmvDrrrpkUvBwPIx\nynFC59ey0Sf7LlXg+n01b2jXYsMGiLjMaSVqhiH0M4GyFIChD1ZgF0Sq9KWW\nCzYoC6z+wnBeO6LNaimqHs7bGsz+a7aXyMHslnMe4i6/uOvrKOgsg2a5yZHT\npIwwe4vZPKvP8fuUAzURt4jRyleeg6jTlXvvPxXdRHYzAamMDneMvGClH/80\nN2zWnzs/Q+IpLXpJX/H4gZrACUq95xpaIyOZCR2f+VIo2Ei0Mwl9ucI5p4H/\nk6LqTpgDsZTAelLDYFNRQRfgGIqDS4T1TQBR41VBBYqiFA42PjIcWAvD9Hb4\nXIWGoe/1MHaPGm9T32iZDkEdmcTTyY+Gdty11w6fz5vABncDBtAVJyYc5IRh\nPFQg\r\n=F+A/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS8s05J7LRkgOXDkeOYblaRJB+XxfUUEnAa2d6VaWz7AIhAO262iAqgD05VETB49USdsj5Vu80x7RWWuUCIE54Tm/F"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.39.1_1575295170191_0.958538597424045"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.40.0":{"name":"ipfs","version":"0.40.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"MIT","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/components/init-assets.js":false,"./src/core/runtime/add-from-fs-nodejs.js":"./src/core/runtime/add-from-fs-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream"},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js ipfs-interop","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","array-shuffle":"^1.0.1","async-iterator-all":"^1.0.0","async-iterator-first":"^1.0.0","async-iterator-to-pull-stream":"^1.3.0","async-iterator-to-stream":"^1.1.0","base32.js":"~0.1.0","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","buffer-peek-stream":"^1.0.1","byteman":"^1.3.5","callbackify":"^1.1.0","cid-tool":"~0.4.0","cids":"~0.7.1","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-pubsub":"^0.2.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","explain-error":"^1.0.4","file-type":"^12.0.1","fnv1a":"^1.0.1","fsm-event":"^2.1.0","get-folder-size":"^2.0.0","glob":"^7.1.3","hapi-pino":"^6.1.0","hashlru":"^2.3.0","human-to-milliseconds":"^2.0.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.26.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^39.0.2","ipfs-http-response":"~0.4.0","ipfs-mfs":"^0.13.0","ipfs-multipart":"^0.2.0","ipfs-repo":"^0.29.3","ipfs-unixfs":"~0.1.16","ipfs-unixfs-exporter":"^0.38.0","ipfs-unixfs-importer":"^0.40.0","ipfs-utils":"~0.4.0","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.6.1","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","is-pull-stream":"~0.0.0","is-stream":"^2.0.0","iso-url":"~0.4.6","it-pipe":"^1.0.1","it-to-stream":"^0.1.1","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","kind-of":"^6.0.2","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.26.2","libp2p-bootstrap":"~0.9.3","libp2p-crypto":"^0.16.2","libp2p-delegated-content-routing":"^0.3.1","libp2p-delegated-peer-routing":"^0.3.1","libp2p-floodsub":"^0.18.0","libp2p-gossipsub":"~0.0.5","libp2p-kad-dht":"~0.16.0","libp2p-keychain":"^0.5.1","libp2p-mdns":"~0.12.0","libp2p-record":"~0.7.0","libp2p-secio":"~0.11.0","libp2p-tcp":"^0.13.0","libp2p-webrtc-star":"~0.16.0","libp2p-websocket-star-multi":"~0.4.3","libp2p-websockets":"~0.12.3","lodash.flatten":"^4.4.0","mafmt":"^6.0.10","merge-options":"^2.0.0","mime-types":"^2.1.21","mkdirp":"~0.5.1","mortice":"^2.0.0","multiaddr":"^6.1.1","multiaddr-to-uri":"^5.0.0","multibase":"~0.6.0","multicodec":"~0.5.5","multihashes":"~0.4.14","multihashing-async":"^0.8.0","node-fetch":"^2.3.0","p-iteration":"^1.1.8","p-queue":"^6.1.0","peer-book":"^0.9.1","peer-id":"^0.12.2","peer-info":"~0.15.1","progress":"^2.0.1","promise-nodeify":"^3.0.1","promisify-es6":"^1.0.3","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-cat":"^1.1.11","pull-defer":"~0.2.3","pull-file":"^1.1.0","pull-mplex":"~0.1.1","pull-ndjson":"^0.2.0","pull-pushable":"^2.2.0","pull-sort":"^1.0.1","pull-stream":"^3.6.14","pull-stream-to-async-iterator":"^1.0.2","pull-stream-to-stream":"^2.0.0","pull-traverse":"^1.0.3","readable-stream":"^3.4.0","receptacle":"^1.3.2","semver":"^6.3.0","stream-to-pull-stream":"^1.7.3","superstruct":"~0.6.2","tar-stream":"^2.0.0","temp":"~0.9.0","update-notifier":"^3.0.1","uri-to-multiaddr":"^3.0.1","varint":"^5.0.0","yargs":"^14.0.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.4.1","async":"^2.6.3","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","detect-node":"^2.0.4","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","hat":"0.0.3","interface-ipfs-core":"^0.119.0","ipfs-interop":"^0.1.1","ipfsd-ctl":"^0.47.2","libp2p-websocket-star":"~0.10.2","lodash":"^4.17.15","ncp":"^2.0.0","p-event":"^4.1.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"927f9f0a07d30d6b96d0ff9111aa1dbc6f99eee5","_id":"ipfs@0.40.0","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-JLfRTzoOtDJV7AasJdMDA+CTkNWKAeaIi1XK+wkrJkb7ruyuZjR3DI8mcvPJu38Plgh19bNAEGJ3Lwcjk/STKA==","shasum":"145df3ceda71c1f3e47cf84eb43da08ee7845cca","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.40.0.tgz","fileCount":284,"unpackedSize":25837627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5SezCRA9TVsSAnZWagAATjoP/jJdqBtsydoIvVBv6lLf\nVkN5clMZ7yYowDosHzxAV5mq3c5ihQhu/pjD6PxeGDhMwbihOY7iX81GJxxc\n/Kv1ymj/GXioaYx5dorg5jWKv48RoD9JPPjasmykOGZ6Aay7BmG7wz8S9ezA\n1QQtsbHdyU7HukcjXnaQNIEpGrwNr/dyEtcsPyJoBq3hAgLP6wFhfD+oQ3Gq\nCZeenO3vJoelv88JZXQRlN97UZflDA9r8GB8Md37kp70RNNz/QE/rWLY8FtU\nfmv27M3UkzRM1McjZLzMf9xBPDgpjqkAYft9nniUFzaXghERYjx8u9edk8YP\nmCFL68ooq8lbJ6NStEoIivhHbnSu0CXmdV2+OvteHc/UZtFPb1KzQS/eALoL\nnBXW5lNP0SpNH2b/fZItJd2/wcf/3U7EOT0udjArM6b35NgH+IwAoD7V52d3\nNruRMhBKUTS6PdOq5LCeh212qCjtn0nCpriGUxCkSix0hBKFHRSAPxHB+fzp\nx7CDWG0R309pZgSev+5F4NIHh1XHOayRuyqz1o56zRnnjJOIR3jxx81Oobug\nwkZ0ghXtmnzMWPY1pOzaZRt3713Lam1Fx2qpy3J8Vvvfp0MmNngebeQau8yb\nRoRMNHv477vbexEn6pUEULqYwoEWB5/pyvvRH30SxlWqT6244ErpyF1FqNIW\n6FE/\r\n=3lb3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFu+XtElCdM5ZXyYbHnVW1g1qdV/NVNSYb06HKplKX7BAiEAjZvzTHSQFB2f8PuHXOW0N3+NRTl1DB/6xezxj3kP4lo="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.40.0_1575298994274_0.46485705158237844"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.0-rc.0":{"name":"ipfs","version":"0.41.0-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.4.0","cids":"^0.7.2","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.27.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^42.0.0-pre.2","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.0","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.1","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.27.1","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.1","libp2p-delegated-peer-routing":"^0.4.0","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.2","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"~0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.5","libp2p-websockets":"^0.13.0","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"~0.6.0","multicodec":"^1.0.0","multihashes":"~0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^6.3.0","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","tar-stream":"^2.0.0","temp":"~0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.0.1","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.5.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.4.23","hat":"0.0.3","interface-ipfs-core":"^0.131.7","ipfs-interop":"github:ipfs/interop#refactor/async-await","ipfsd-ctl":"github:ipfs/js-ipfsd-ctl#remove-option-normalisation","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [Is there a more stable alternative to webrtc-star that offers a similar functionality?](#is-there-a-more-stable-alternative-to-webrtc-star-that-offers-a-similar-functionality)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nInitialize the repo when creating the IPFS node.\n\nIf you have already initialized a repo before creating your IPFS node (e.g. you are loading a repo that was saved to disk from a previous run of your program), you must make sure to set this to `false`. Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    PeerId.create({ bits: 2048 }, (err, peerId) => {\n      // Generates a new Peer ID, complete with public/private keypair\n      // See https://github.com/libp2p/js-peer-id\n    })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/interface-transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/interface-transport](https://github.com/libp2p/interface-transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/interface-peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/peer-discovery](https://github.com/libp2p/interface-peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nAll the API methods aside from streaming methods (ones that end in `ReadableStream` or `PullStream`) are asynchronous and return Promises, but _also_ accept callbacks.\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.addPullStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addpullstream)\n  - [`ipfs.addReadableStream([options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addreadablestream)\n  - [`ipfs.addFromStream(stream)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromstream)\n  - [`ipfs.addFromFs(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromfs)\n  - [`ipfs.addFromUrl(url, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#addfromurl)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.catPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catpullstream)\n  - [`ipfs.catReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#catreadablestream)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.getPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getpullstream)\n  - [`ipfs.getReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#getreadablestream)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n  - [`ipfs.lsPullStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lspullstream)\n  - [`ipfs.lsReadableStream(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#lsreadablestream)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.readPullStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadpullstream)\n  - [`ipfs.files.readReadableStream(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesreadreadablestream)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refsReadableStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refsreadablestream)\n  - [`ipfs.refsPullStream(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refspullstream)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n  - [`ipfs.refs.localReadableStream()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocalreadablestream)\n  - [`ipfs.refs.localPullStream()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocalpullstream)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object (legacy)](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - [`ipfs.pingReadableStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingreadablestream)\n  - [`ipfs.pingPullStream(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#pingpullstream)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.bwPullStream([options]) -> Pull Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwpullstream)\n  - [`ipfs.stats.bwReadableStream([options]) -> Readable Stream`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbwreadablestream)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### Is there a more stable alternative to webrtc-star that offers a similar functionality?\n\nYes, websocket-star! A WebSockets based transport that uses a Relay to route the messages. To enable it, just do:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'\n      ]\n    }\n  }\n})\n\n// your instance with websocket-star is ready\n```\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","gitHead":"42bf70ab2d79ecaa2e89d7669517ca2ee3c6fdec","_id":"ipfs@0.41.0-rc.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-HjzCK/OO2ok9npZKK6FMObGFtDk7Mp9uFD30vtKOQlOVjiUNNCZNqLKrPkLmkIlSEkIt23RVxB7EC3QEAfYMMQ==","shasum":"3fa738af47db669bba455dd46c1d2e40438334d2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.0-rc.0.tgz","fileCount":285,"unpackedSize":26009634,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeOIp2CRA9TVsSAnZWagAAVoEP/iyEhJoX0gdOsf0qNlHX\nRQr68YTIoqOJTAoS/uuKMEfr6aXrvZhkGVQ2jilpkjcfgRRX5iLQWDsBgSSB\n7UKA5f8H0t9xo7qg4vafTO+gBmDfsDSRPTpyji7J2b4wAaEd7aJYLJpTE98X\nc+bIaSKvoFddV+oXeb9Z9YlWUTviKE87oFe23AgDYTXsZgtHA0b0MpW1fuyN\nsnitbx3iVpWuO6m1imxJFQZ1l82WVZ4o6egKCIOH00eYcsSR73TIZhnFs+Yr\naQwFPDisUfNBCb2Jg9ptjioaoRhe+AsU/tydmr2b5pWjhXD+YwdOFeP/BN4d\n9q1B7+P/+A11PN6b4DdTChqZOp1SCPfGUIpQwIcXObmdTddJaRQTi9EK1+kE\nyHIENCXtZ5bqqAVd1gPerNSRREjw/2DhwdDVVp3sz4Rs+dYTQDMqjUZE+Wj2\nrgzcz58kUCed4YJSLAUjRurt5BRVD0ZDDvghRP/hJL8+zxEorMog4fXNUclk\nEaU4rEYwKjTPqH2gNEePzoKEHeqvixcKSEA2jQW+tRovL4q/6BsU4od404ED\nffg2Os5ewEbFIwmYjcZjml6Vbqh8+81abEOWRAe+HfWdDMkXJY2Om3P8gmAc\niOCynUw1nqpTbhrCPWHCEtLgNoyFqrdk0dcCTtLLnGHVTMVBblEe4p9VGTKR\nFk4L\r\n=f1lp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCwvQkbubLWdVWcHxEicHFpkxCnZlAlYz8GzVSLXdWcAIhAKegQrNA3a6ohJME/nQF5cwCh2keQzxcRtsXKyzGBPm3"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.0-rc.0_1580763765859_0.596405969301744"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.0-rc.1":{"name":"ipfs","version":"0.41.0-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.4.0","cids":"^0.7.2","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.27.0","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.0","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"~0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"~0.6.0","multicodec":"^1.0.0","multihashes":"~0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"~0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.0.1","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.5.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.4.23","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#refactor/async-await","ipfsd-ctl":"github:ipfs/js-ipfsd-ctl#remove-option-normalisation","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n      - [URL source](#url-source)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","gitHead":"a005a53f0ba9ff3895d0f96ad9ecee4f58d7ea06","_id":"ipfs@0.41.0-rc.1","_nodeVersion":"12.15.0","_npmVersion":"6.13.4","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-ippoldxdiwJ8RX1VLC1YLIQDt6yFgVu/Bpo+56fEQ/g/YZiWmqTipxQ/VtSxteIfkw3x3wvJMAUMigtDrcoFPg==","shasum":"16bfd7a24966f5b5c53744d937d5c7cee4bdcc2b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.0-rc.1.tgz","fileCount":286,"unpackedSize":18509837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeQW8/CRA9TVsSAnZWagAAHkMP/ApwBOdsdO0uW3W0GgjZ\nP8InCo7i1wPQMvFVeKVs+kSjG5Ln3/+li7SQdyqIfIQVFbjJjaDnScAGY3JK\n0HbUAaycR5hPav/OTQxVCnC9NV0qPB2vBol8cugEkilZnVWKOd2NsMtQFpr+\nRmbt2yh94RHXRFoV9ZNe3QAccrRW8dL87GoNSQc8MDCMWVMLMAPmygGEOaoT\nqtwrV4lHE2LouXgEO3xUgZli+f+KybYqL09A8tS5dujgDmeJR2X5aPdcHlPy\ndKyzmlFrrOX9cZUeyP99p5Y0PlDV1N/Z3t6NlJKCeqV8SOQXOY/E4aylki1h\n1uYLfZ2Vhki6YIhF+97hT9LcHPk7sakNlm3B2HhWNY7n5QlMU3BegfWeQAHP\nAa1H0KqRRgmx+i62MoPYZojNkPAXl81kOoLZYGozJ1qpUOsCoE3jksAmzdWp\nY+xAXSTXaLwsMX+iI88bT3AyA4AFaTu7Gh3h+3H2wg+XwtpMswtOQGfbUtjV\nSPLpbagaI02q74GM7n93V1E5XXm0mczh2i91mZ8wuFm1LavlxzN/IBTAT8Nf\nA6RkVTqP5xIPwR4wWPdD7deqpiZz6CmsaYvHm7yRgexEIX/hLdAEZONYa5qQ\nzpuT+GNMQaepxa0uWuwQw2byFSUNLYCL+LROrWuazku0uCbr0qSXjkx8vkCc\n1qhQ\r\n=WWV0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+T01u0r9Gxv7wbnCRA9vM3WIFBFaftEfihIjU6jUvXAIgUuNGzoMC+S13+IE1Iffj1pD1A8IWWnoxEBdNmXUSnWE="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.0-rc.1_1581346616056_0.4179848435056823"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.0-rc.2":{"name":"ipfs","version":"0.41.0-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.4.0","cids":"^0.7.2","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.0","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"~0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"~0.6.0","multicodec":"^1.0.0","multihashes":"~0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"~0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.0.1","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.5.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.4.23","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#refactor/async-await","ipfsd-ctl":"github:ipfs/js-ipfsd-ctl#remove-option-normalisation","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"c31489569f736688d87058293f6ea090ed2d5980","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉..\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [Events](#events)\n    - [`node.ready`](#nodeready)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n      - [URL source](#url-source)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\n<details><summary>Alternative method to construct an IPFS node</summary>\n\nThe recommended method of creating a new IPFS node is to use the `IPFS.create` method. However, IPFS is a `class`, and can also be constructed using the `new` keyword:\n\n```js\nconst node = new IPFS([options])\n```\n\nAt this point, your node has been created but is **not** ready to use. You must either attach a listener for the \"ready\" event _or_ wait for the `node.ready` promise to resolve:\n\n```js\nnode.on('ready', () => { /* Node is now ready to use */ })\n// OR\nawait node.ready\n```\n</details>\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### Events\n\nIPFS instances are Node.js [EventEmitters](https://nodejs.org/dist/latest-v8.x/docs/api/events.html#events_class_eventemitter). You can listen for events by calling `node.on('event', handler)`:\n\n```js\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\nnode.on('error', errorObject => console.error(errorObject))\n```\n\n- `error` is always accompanied by an `Error` object with information about the error that occurred.\n\n    ```js\n    node.on('error', error => {\n      console.error(error.message)\n    })\n    ```\n\n- `init` is emitted after a new repo has been initialized. It will not be emitted if you set the `init: false` option on the constructor.\n\n- `ready` is emitted when a node is ready to use. This is the final event you will receive when creating a node (after `init` and `start`).\n\n    When creating a new IPFS node, you should almost always wait for the `ready` event before calling methods or interacting with the node.\n\n- `start` is emitted when a node has started listening for connections. It will not be emitted if you set the `start: false` option on the constructor.\n\n- `stop` is emitted when a node has closed all connections and released access to its repo. This is usually the result of calling [`node.stop()`](#nodestop).\n\n#### `node.ready`\n\nA promise that resolves when the node is ready to use. Should be used when constructing an IPFS node using `new`. You don't need to use this if you're using [`await IPFS.create`](#ipfs-constructor). e.g.\n\n```js\nconst node = new IPFS()\nawait node.ready\n// Ready to use!\n```\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n<details><summary>Starting using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is started (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n\n  node.start(error => {\n    if (error) {\n      return console.error('Node failed to start!', error)\n    }\n    console.log('Node started!')\n  })\n})\n```\n\nAlternatively you can listen for the [`start` event](#events):\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS({ start: false })\n\nnode.on('ready', () => {\n  console.log('Node is ready to use but not started!')\n  node.start()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('start', () => console.log('Node started!'))\n```\n\n</details>\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n<details><summary>Stopping using callbacks and events</summary>\n\nIf you pass a function to this method, it will be called when the node is stopped (Note: this method will **not** return a promise if you use a callback function).\n\n```js\n// Note: you can use the class constructor style for more\n// idiomatic callback/events style code\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n\n  node.stop(error => {\n    if (error) {\n      return console.error('Node failed to stop cleanly!', error)\n    }\n    console.log('Node stopped!')\n  })\n})\n```\n\nAlternatively you can listen for the [`stop` event](#events).\n\n```js\nconst node = new IPFS()\n\nnode.on('ready', () => {\n  console.log('Node is ready to use!')\n  node.stop()\n})\n\nnode.on('error', error => {\n  console.error('Something went terribly wrong!', error)\n})\n\nnode.on('stop', () => console.log('Node stopped!'))\n```\n</details>\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:node:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.0-rc.2","_nodeVersion":"12.15.0","_npmVersion":"6.13.4","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-9xP4xLIMJ1BLDIxy9fRPw34LsuZO8HX2Dh4lTrZkYQ37FjNDuut0Np3KQerBuWDcKc9w2K71fuisx/Jqxrp0/Q==","shasum":"efba1e52d65a7d9be8d1a7a648ad8412274231d1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.0-rc.2.tgz","fileCount":286,"unpackedSize":18509821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeQn5QCRA9TVsSAnZWagAAwwsQAJUXHgqlK1G2rSC6MloF\nlL6KIBUZjV53XDGPAeLeQHSQzTfiyZUy1gPo95TiqiaPwlBFVT+al8ZiUwTZ\n9lUnc5IOZ4YDnurMn2RUC8k4Wl5vO8bxyxEkTEKr0k85tDSehvj/cuu+9VD/\nWR5i3gUZoFbYWzerFIpALx9vZZMIuEPI0lXD365WGvjC2FEFVujAfKMWnxgG\nFxksENoj4ApAD5ZwQWpLQ66iPdFam5NTFe8pD03ewPrwHJobsj9N5Wj3n9Wm\ngndGloSjLJ1ikHbIyGDP0ChRD6TDshV/4uMbXyEngqkTKTN6rCGZ1jtGYyn3\npXEPwqPGtNLPHfcc0/yszvurTKkk0wBY3ElW9vzJgAPeYl8gpTIQmOkRitKE\n4y3QTkayIz5r5mr4vDqm4KxPT21KYLVm9k3cLI4+h38pb+8Q81LcYboC9mM9\nFMraJ4dexDI5nzBr4cLLcwA8YVgCxdterAulYBWwAJq3JQEd3F+AvjclIn2m\nR4X984F58qmv/T2O3p6WYdNYCTYUNj8kWMl5Ok4ztXF8sZXwKj9kRt9uFjsR\nWLzbW/Qo0A9qZjw80BOzNtPdyRRLG1kQ5YjKU/Jz4LrD478afc9wtDEuvhXt\nSOnud9vHSfzgZOZeZrZSg1ynYqTH8a4rJPVKjjd4PF2vhZvkY8thOt+VwA1i\n1a0x\r\n=OuUQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7lO7TUg7s1DjNvBOypUTGcAcynXxU/Wm+08loQbL25AiEAmnQ2OZzVsAF/AsrIKx5KjLIK/RB+aiZ4y96R1kl6VUk="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.0-rc.2_1581416015538_0.16719840339410053"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.0":{"name":"ipfs","version":"0.41.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.4.0","cids":"^0.7.2","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.0","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"~0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"~0.6.0","multicodec":"^1.0.0","multihashes":"~0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"~0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.0.1","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^20.5.1","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"cf8aa1285e9c2d192af831e91098f57dec5d8c73","_id":"ipfs@0.41.0","_nodeVersion":"12.16.0","_npmVersion":"6.13.4","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-5L4clrbQrOdCc5iDr9FwOq0j7E73A/HfitJsmg1+A9mT465rbiEVJk0rJs3LFE4rE7DCtQsgmD9P+o4ErAWGQA==","shasum":"7b3ee9360fae18ac67aa9628399d40f4f4afeefe","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.0.tgz","fileCount":286,"unpackedSize":23417369,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRUxGCRA9TVsSAnZWagAAqNMP/2xpg7oe4c5u8aXpJKP8\nrMAWvn//C/2N9ww5EUUldeOElDJJj30OkQpWHS3eqMcuaG6zCJG750KeE9iA\nAxQVMC+oiaLU59/oq2uCSGoDQH4cS/4aKHD29TtZvGAxWf5ynaBfqmPhvEDJ\nFio8aoBoE2f6vr3cTNNSRi1wohUa/zoPka97W0l7nrbrLdhr898orAcjXrxF\nQRYC0b1iZyzzO61lxwLiHcyWYdzDMKfVR5m064GK6GrfwWdHGW/+xNEgZUJk\niz/1nf08MeEVSWul5qx3nI/cq0oq26B0KrYpe8SbVJg+l/LPnwB0NZnlm7O4\n9dmsV16n8IdWen6+xMHsZ3u9CFoc2kIQOCf6gZqQqW5OJ2e12xvqcr2Mawed\nMx+iUyMrRLCne30L8hWmr5GhbOD43B+pukA+RWkkkAA85Gm2bdB9f7P2jr4I\nzjYDX6iREenBndN+g5a0LcCgEu9UHSCJVaS3zjnUrNFUnbmBmPhp+DXeQosM\nJgMXv5LTCtbjczF0GedvRX1UPo+Y9hl6xaHee+IofCcjggZOnw5cWtJU32nr\nf3ZAGMfl0DPC750DHMkChKyBdg7+QnBQWMJ9aWgyQrNyCk5uCC20DMmlff6N\nO6J8nSBleCLD4Y8R/IxWort9jfVCHDo3bgPN9bHnwpPwVVVC+z/Ziq5i6G2I\nglE7\r\n=AUSD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5hwLz11nfBMBtZmCeALjU7qzujaJAc3HeKzz9sY4MVgIhAK4o64Wymw4mW43dS94SvNrbfv/nVv3nIGqop91DwVhQ"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.0_1581599813760_0.7948834137335608"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.1":{"name":"ipfs","version":"0.41.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^4.0.0","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.4.0","cids":"^0.7.2","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.0","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"~0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"~0.6.0","multicodec":"^1.0.0","multihashes":"~0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"~0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.0.1","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^21.0.2","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"}],"gitHead":"aa68c68d3af2ab3ae8033c4487da90fb99df62af","_id":"ipfs@0.41.1","_nodeVersion":"12.16.0","_npmVersion":"6.13.4","_npmUser":{"name":"alanshaw","email":"alan138@gmail.com"},"dist":{"integrity":"sha512-5UI0WFh7eD2J+niMNrVYOFmUH2bL0iN4VXlVWMnsHyD7qZ6IPqgr7cFa1Z+udpZkQu6uLEcxnHjXyB2XmiibIg==","shasum":"7249802920649af1e32738eccc6349516d47b20d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.1.tgz","fileCount":286,"unpackedSize":21982962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSvm1CRA9TVsSAnZWagAAW0oP/3rFlasDZRZop1PvNZV+\n+agIC14oxLJWgW3hDeVC6H9E59MLGqr2Pjp0aOYl5n9rReGYdGkolVL/ocDZ\n1EyB+CBLyHV0cFtXNmklWd/Q4Z0Q861ESQmHQGgWrDMQxBtx1nRTbvKOcPea\nIf3JihKoBEUV/wvxMSisxTuBqTMFLr6+6uvri5a2ooxj8G5dsc59hQhlFC6B\nxQH5lDQblL8q7Aeqbl94GLiho9VL2aWJNMU1w24ztsW9QOQ03XgDse3rrbKd\nY5/LM7khik9kVJ1qAM26loIocTm5FqukZxXgW4YXqv8ikQhiSxTk51ZdysFm\nt0YUIOGiImVJ8JHGObgjRc8bKWCQL4scyEesX8/2sNIFbH0joxosVPvP8Top\nawn96csLrN82sMemB+XhOnwPgjn/pblxCEtElZNf75Ajq47NLXQUPEBbAcZ2\nNm18m1gDaQ8up73gIglGl1I8i+LHs2zJdd4uSjSrgXFWqo8PhcvEShOHSH/z\ngwihsC9hZWCMNOESRFAQNDE5kIfHZKXeIyj/8UW7SN3BxNXk2dImNJLUi2SU\nMFS19o1a58uyzm2C1W9CWxBkEDhsy+bRbC2yXjWGHlNj4+ROsd9OMbtgdiPx\nnZsJ21VrmUw6pUr+gB/hxNwTPlfZY5wnrqhP2i54wYrORYmwwVanh0J/eYEB\nInr/\r\n=YDHd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQtBxuP8xhbRy9OMkgCaFt4inkylhxb3SynZKFZ4IfAwIgbu+q8r7B9VUTVGIKnrtf4143FE1pE6MvrX9QhP7B1gs="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.1_1581971892583_0.10183376541051925"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.2":{"name":"ipfs","version":"0.41.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://js.ipfs.io","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:node:cli":"aegir test -t node -f test/cli/index.js","test:node:interface":"aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-external","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","benchmark":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:core":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:node:http":"echo \"Error: no benchmarks yet\" && exit 1","benchmark:browser":"echo \"Error: no benchmarks yet\" && exit 1","release":"aegir release -t node -t browser --no-docs","release-minor":"aegir release --type minor -t node -t browser --no-docs","release-major":"aegir release --type major -t node -t browser --no-docs"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.3.2","@hapi/joi":"^15.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"~0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"~0.4.0","cids":"^0.7.2","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"~0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"~0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"~0.8.1","ipfs-block-service":"~0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.0","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"~0.25.0","ipld-bitcoin":"~0.3.0","ipld-dag-cbor":"~0.15.0","ipld-dag-pb":"~0.18.0","ipld-ethereum":"^4.0.0","ipld-git":"~0.5.0","ipld-raw":"^4.0.0","ipld-zcash":"~0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"~0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"~0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"~0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"~0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"~0.6.0","multicodec":"^1.0.0","multihashes":"~0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"~0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.0.1","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"devDependencies":{"aegir":"^21.0.2","base64url":"^3.0.1","clear-module":"^4.0.0","delay":"^4.1.0","dir-compare":"^1.7.3","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^7.4.2","stream-to-promise":"^2.2.0","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"~0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"Juan Batiz-Benet","email":"juan@benet.ai"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ","email":"victorbjelkholm@gmail.com"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Dzmitry Das","email":"dbachko@gmail.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"}],"gitHead":"373ae8b19901a258e5bab8e4196d80166ab5cade","_id":"ipfs@0.41.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-pEsQiNJSD6khGAG68z1f7/lb1OvBQeB9qW7O+m0b4mXEDgrmun593MqJMNjztlHLlqycJk2TgzKi7fToYCvYGA==","shasum":"c997df07a60ae435072171818a85c5f0c953d468","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.2.tgz","fileCount":289,"unpackedSize":22092784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVmhJCRA9TVsSAnZWagAAn1AP/2s9a8eEy2tiUX+nquzL\np+P4TatMNsJqwH1OWSqYCi0x/FOxGsWpYIid+sxwnwg11Ts+L9Z6lBgg1sWw\nSC7f4/eFmd9m9cCC4oDu3Gb9umms675zvmtMrK34vSwdCL7NQAJ9XGtZzRoG\n3sC1ijuPmp9SnTdr3Nsw68xQ6nh4jwSfsU1On3IDHY1N28RiPmTpUfot5n2W\n5rituuENxpbC/SGDTVQQ4Jc9kxtWMWaxlUFK+lgn72sm9VNUntKdGL6RlqvV\nqI5os0gmoJvz3YYj+sxIzvQ/iP0lHIQ6JzOhrMjHQ7VRnVK7mwtwg3omhhyc\nkxRFaiOpAgZoHPMzDE6LZLjQWOHoGTCr7uPwBa0rVoCEPqCvF0Bu5uTM9si/\nX0NxkEmmo01uSvSa5UHo3nSiHwetuTsp23Ma+JsD3jXQod64y74Nx90zhrbd\nXS0BhB/hK0inbksMaAnkM0vZfT5m4EmaQCgnlfekla5RbqI8o7Gp6YGeH803\nQGktt3D46CjNFVn6hawQqYI2wy6enM4uoxncavUna8nDWNwWA5MkF/HaV7Vx\nS7KIFkDl2C2BuwYMHDUFKtxzK5752GyRgnx/eECaLp0Rr61eZQQvkMZM3gN9\n6M8I0m2oTHte+JR++TGJzy3WJHNRhSAd3XklSLBf7/LJbGi5NEAhDA2yOdiC\nXYLG\r\n=yx02\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5tas7eV1ChNbch6PERT1iLePBlGFxEKwpp7Sbwg/izQIhAPK+Mtky4fITmofnD3RFDifJn6fPrhLQyBpYYcmiFAc7"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.2_1582721095492_0.7079512754654826"},"_hasShrinkwrap":true,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.1-rc.169":{"name":"ipfs","version":"0.41.1-rc.169","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.2","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"e337a7cde24b82985144f2105fd7908d918a0b25","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.1-rc.169","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-2NwbgAbhUyezm1y53EOtVbsCXSw0dtJLqA/RXSidTM9S2vqawUfWg30YhWRQHHSwPVARp70nXGS/5Pm+6DmntA==","shasum":"4e8ffd6aeda0fefeb7c58e5d6c80056b6df747e4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.1-rc.169.tgz","fileCount":280,"unpackedSize":571590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWkMeCRA9TVsSAnZWagAAAlQQAJrEtntmK1B7DYBd46DZ\nyJuXzh43EJYAmVpn95N3KFC6BpcQT97KeIxpj5IJ5U1X0WAY/XU89Z2MJzgI\nRAiG/zhu7IY2IdFcggP+QWaI4C9JrGqTyU6sLays3yr/45fS+evbsmh7sd7d\nupaPNMDMiI+cvdSdPDJa5CmE8o7naSiW+F8CEVfDfdU0EmLOBze3GONp/ghd\n0Skkzb/Rdblf+q5qwL7/uDQuXBOKQMgjXR/uhwQd5hsahaglIoZ1LveiM8L8\nWqzwWnXM8PD0XzTCkPP+m/3Lot5caIzVaXZQmJ7gAds/zTo7tqV3wuQQ8lj8\ndiPUqnIP+B2JzTpuCZ7n/JkKd1ZaDqFEQ6Ct0vgzJ5C7OSYUVIEng7zemcx4\nffpLdp+mRjx2Jza4CoaNuzdqyxkqXkmBdsHppmdO4k912KTalY0uO704WdNg\nOfHp5nYk7r1HXJX2pH1reIAQvMmzGwDc0WH2w3Dx4WjOhnJYIGeckaIvd19A\njUcU37+rQ2g55Gb7+p+JtJJgUKPYGkp8k0UvJNNrg3p9oE0miALADpQVm4Qi\nzBrP1Ez3KTV/wXkKJZ0awSqCcFYA0LpJYdr1UvKjXZra+t1/RamTZwlnA0+y\nqy33+GFgWXNdmbRiln4I8QI48HyVGGIIBgMQeqxPukFEbDYhBrKMr44z5Ap1\nu8VS\r\n=Fvya\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFe8G8tZk+Rl+bfXTgDTARpXt1hRw9Uu4HKOCfNHU5vAiB3mrt9rfusBgSwaCy554RAr25Oc04HgJ/x5kNpvktPoQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.1-rc.169_1582973726142_0.329699217766507"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.157":{"name":"ipfs","version":"0.41.3-rc.157","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.0","ipfs-multipart":"^0.3.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^0.3.0","ipfs-unixfs-exporter":"^0.41.0","ipfs-unixfs-importer":"^0.44.0","ipfs-utils":"^0.7.2","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.2","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.0","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"866360a329842f574e046072330b7e750e7d5065","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.157","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-zweksy4Ecpoy+OKq8HE9UKHfaSPesbufvKuyxRZKM2ostfu/hdn4tAFUSNu5zOtaacG/fsvUdPRGg+O0wEZA2w==","shasum":"1f0c0fb516529eb5d91aa82d01d2c2fb926899d8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.157.tgz","fileCount":280,"unpackedSize":571590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWmoiCRA9TVsSAnZWagAA9ZgP/RJHmfAf/i/SHcb3LbRf\nTDJwvoKr+Ym3h5JVSMXgHQ6KqP/UMVyBIknZJNjk7Ci227KlIDmMqKIl50xN\nikNnPkvJMHz5Pkn8vnMKxrbmM1bxPOtmBKVx9NqXEFIS9HKkjDYLApgJ1Igk\nz1zLDcGse8TGFW64buKYta3FZQPKUPyaECFPXCzbSFKUtY8GTbfvWwopemET\nAR/WA0GBueDxtTMZz0+aJHjJ+YC4+leTnYaYjGl+/mvcU6DS8ciTYpU+vW8z\nTDyPNiwz/8RX+lidid5XTCRBs3++hNY+sD3mDl6N/FJh3rmPpqmPSti7QRs6\n0OHdqO2GzjgQ9aFfGoSOLCwhfcawW56FnFWbhsO/s1PDqzzHmTMkyz0t2nDr\ngsCJwFV6cOGfkGOTz7zMrUW1HC9jAWUYAAJlxantjUs6rGTZ2M5SRlcMxBLu\n/wDOgA3Tgj+/w/Ba3D8KOV6xOiJZarQsYRgh4hgX3k6k76rBOe7Xb8YrnvAz\nSnx1+hYJ8JCYoIG5Qxys0ADRtYnjGTG9jlBqIsDLUHMg5Gmzn2d8To6LuXvM\nNSfPZMzodFoutTMkWaUcC/1pUOJkKDNIcT01wBjVxMhzzzOATHzP2gjjtI1K\nPMOaEyplmrP+SEGTe+jQEBpvGzJdz189TGhUKtLlnomuRODLuEbXEEa83ueT\nPeJS\r\n=wPT4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCz4lCuPCMo2oZ0NsHLjgMr4lSNGW0xA7LdJ31Dgd1E+wIhAPTUHc2j+oVIh0yvHt4Wo2jKCds1DD1SHVh1ee9PuaFc"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.157_1582983713676_0.5575628393138825"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.115":{"name":"ipfs","version":"0.41.3-rc.115","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.1-rc.115+f381c34","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.1-rc.115+f381c34","ipfs-multipart":"^0.3.1-rc.115+f381c34","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^0.7.2","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.2","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.1-rc.115+f381c34","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"f381c34545e5550e051b98e602c50f296e35c03e","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.115","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-zvInAmx3oCu8yeeCMlOSgx2gqP56iksyvew4EfMVlbxNwuBuMgeIAor64Cz6JnmsbnPdYfQMV+UoaFG2aO8jig==","shasum":"d5bf53dac99149bf049be3405526635935e97f08","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.115.tgz","fileCount":280,"unpackedSize":571648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeYfojCRA9TVsSAnZWagAAHyQP/1W5A/oBlaQnSocInwTU\ndv+yFqU6qZbgptG42sE3yiIMj23aeJmRyn+EeCzWnDazUuzYuRWMD20Q2Y3f\nP4zmIj3Dwx6fYfYycxQinpaG2Ei5P74H1nY54TbYz/WCIdgI3mNQyq0+P7RH\nq5axUAjtvjSbxlT04TxNB//k6uxLFsTV2qQaXE4cgKyE2HDuC2CVVX6+uYvP\ny4/oSqz9VHmCGpNQAboMIRoGif2Ap83UpJJ1h9ePLZOGNhorDEQscax+Owun\nRVAZMTFyQqQmyBx6PU/HCCDyb4aQ0U8ZLn6I0T3j46GSIKek46plPmgfdwJ2\n5O3Hg56gfJbv88dI18FJ63OH8AwOT16vUgdqJXvKZvpsr9RUB1mBZ/11BOB1\nullY3r9uJLlvvm3cwh8o/l0R0mSXBBykXWhqUkE5WTPDV8FUKpPINrcE9lo5\nkrhsm7r9fmg8Nc2yHlWNzACv3GetVouYUIRU6SI1l25XWxfk7CmdFICsx3Il\nn8gGrC+gy+Fsta3x4VqV5y/LyGNkK6+TFZtcFtHAyN4wehSqEvT6lICLNhRG\n9Vcp7QfB9Fjwp4mUyjkqOHfxenXIuaXS7t9WIv9iTeHhAiixUCUYypz8W4ju\nh33DpgUtLwCtyGhCJHgGBwY4p/hwUz086KTz2yjPwoQtiA4Od3Qpd1Z+dQai\n6PpD\r\n=Nos6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwNU7IzGmLoQcNMuDCTb5/X1Qj1SB0ZjbBqHdDnV2V4AIgFyQLwrsWBVGKYxSBKWd+1XkH5G32WL3YzOc9unSpbDA="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.115_1583479330725_0.911487698237947"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.91":{"name":"ipfs","version":"0.41.3-rc.91","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.1-rc.91+763d2a0","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.1-rc.91+763d2a0","ipfs-multipart":"^0.3.1-rc.91+763d2a0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^0.7.3-rc.91+763d2a0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.2","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.1-rc.91+763d2a0","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"763d2a058b6800fdfa0d744bad7f0a136e59e0cd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs-exporter) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-exporter/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-exporter) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-exporter.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-exporter) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-exporter) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs-importer) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-importer/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs-importer.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-importer) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs-importer.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs-importer) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs-importer) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`js-ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/js-ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs-utils) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-utils/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-utils.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-utils) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-utils.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-utils) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-utils/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-utils) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs-http-client) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-client/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-client.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-client) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-client.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-client) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-client/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-client) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-multipart/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-multipart.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-multipart) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-multipart.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-multipart) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-multipart/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-multipart) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs.svg?branch=master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir.svg?branch=master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations.svg?branch=master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info.svg?branch=master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js.svg?branch=master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | N/A |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets.svg?branch=master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex.svg?branch=master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld.svg?branch=master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor.svg?branch=master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing.svg?branch=master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt.svg?branch=master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr.svg?branch=master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash.svg?branch=master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.91","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-ip7VW9HreSsZ2QUN7aiYnyEvQOrSY2rq4kdY2IbgfjC8SkfpUXbUG/pINScIdURPxFzb9kw90QPTQXmPHxBDTg==","shasum":"69f28e01a2d2d5c1eee94f935861c5d56688abfb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.91.tgz","fileCount":280,"unpackedSize":571657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeYk5sCRA9TVsSAnZWagAABWEP/2Se7/sN4HV6TTE63csj\ntwVswvgJiHXLPQsegLi+wMiHy6vEfHgD+AhQRyHDtXkErMpdsWXPohQ8B6LK\nra3um9LK1vj65ZkOa6Qe6xLbJvhPL2tBhVXC42EX6irJzc44NG+1onvcOn/w\n23lEujf7esGSO0JbqCsbXlR5brVlIsa5Iz0KozzNUjl/TsyVE9/4Dbv8e5n2\nMHYUposzE9E7H+KqvF1GnbhSQ0TiKW5WoGvrzK3xyKiU2GVrqenzuSrE7wrP\n7FkQb/5SowSq/9XW/oBIK/kj9iLfQ3iU7YY2x1otSol/4GGtrqfCCBSNnNAd\nBW4Dq9nKuI70X5oYQeBRLzM1S/oZsC+g1SAyR7R744BEKiGIcT4AYMsIlKlj\n2yiltlrw1zRi2YS/Vekt3AgY2EocMazHNwAINTxNfw/whLPA2wlbaBTNjrZS\nP3rXlvQn9x06vC9vHSNEhDMTuxIYx0Zt8mqv+N0Y/STEmrBG8b/nehd1/AtT\nInw+77as0Of1tMdSOLFDfm8QHRPgQhZz+UcJh+rLAWhHRaRp5HLEFezQJfZU\ne1q1A1jbXgQL3Oaqgh7KkLEqx0l5ABTKLGuPe33hXGpSsdX/SsopN15TIFzf\nr6VFiF8aLaxGOjG5624qp7QYhIBaKfGiTTABPbGSllHHE2OO7Nmw/02qxWga\nOnnb\r\n=Pf8K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCicNOjvzqgKZccrOor6YVxhQyh7RqWkL5uXGPPcQQ2QIgYd3WfWiSJ3vujYH52D9jo56EgkEkW28xjC7ySCr29uA="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.91_1583500908202_0.5109722934890737"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.74":{"name":"ipfs","version":"0.41.3-rc.74","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.1-rc.74+c81c680","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.1-rc.74+c81c680","ipfs-multipart":"^0.3.1-rc.74+c81c680","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^0.7.3-rc.74+c81c680","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.2","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.1-rc.74+c81c680","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"c81c680196f0af82c9dbe7ac1cd404d99e682b1a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [unpkg](https://unpkg.com) CDN **or** the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n```html\n<!-- loading the minified version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version using unpkg -->\n<script src=\"https://unpkg.com/ipfs/dist/index.js\"></script>\n```\n**OR THIS:**\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs/master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.74","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-YPNOqHPhhhRhhrxqRdpn9lsLIlMvnuOOZ1SSV6UMTuKYA6Kr5Qxv1gJ0ab9fv8HB5j2TNG/+JfRvYfX+U6tr+g==","shasum":"ffb2837ccb5f75b6cb591390bbd2c316f42109fb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.74.tgz","fileCount":280,"unpackedSize":570866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZk8QCRA9TVsSAnZWagAAV6cP/0FtHRPf5DDBs4s9SCUX\nrW2SiaHeq1yJc3WUEP3ws7Da/wRor1yf4O6740BbWUD4moIuF6NyOGwHRqCL\nnR6uiNeHVemCSIuh3Yt2QgEO4r/BOj/BgkQSvqwta8X3oB97fUbXPtLzxJdu\nspVG2tyC8i23RH10NLb9kiQAkXVjVq9O9QkiDFYsF4rV6mWnuceUjdMgBNyM\nrGFzyxdimKzJkCUMvIOgBNL/18m7mlcavB0gMAMLcn1I/Re70h5hvoc0djKd\nmduETK3k4p5KTSR0YXwk6kZhjIv/hUwsIJxypjLeqPWkP+l3AooGnw9nSvBY\no/CChA/TGAp4Y5pAOwVbJfY/du0tK2KI7ZObG3ab6gn1EkO/RjRzsqyxCFcy\n37NqifzmqQZcrNJat5XJG6233ML5ck3W2pSsurTWHyLK5euL08Gmx3x4NHVn\n0MU89HKJJhgFBZ/ai9pNNSKs37GCy0zi89TH+YBMekQQEScv7SFgux1UC2Ct\nqO/jWVxjpg/WTu4MHQLZQSZsIyfGJV1GaHZECXu4LpVmBbP1rMi+ofl23Ego\ntl/jDYr3So1ou8OEQwBiUlVHa+zwwOhGsroJ30qa/nS2bYOXp3joAYQVIRoY\nAK+AMJ0e0M79jSQXcR5/uin4dC9mDODQKKjXMp6jhODD4ChfFC1Vd3HZ+OH2\nL2Mz\r\n=5tJ5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDpuOC0mCEVBNoHUiEBmpk02VAT3fm6kt+hzSrOQ8qQAIhAOttVqq+R3tvnl+Q28qE0XsUjhDdxnT6Ld/F+wrlIEbv"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.74_1583763216190_0.79557958774702"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.55":{"name":"ipfs","version":"0.41.3-rc.55","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.1-rc.55+ff272f1","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.1-rc.55+ff272f1","ipfs-multipart":"^0.3.1-rc.55+ff272f1","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^0.7.3-rc.55+ff272f1","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.2","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.1-rc.55+ff272f1","ipfs-interop":"^1.0.0","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"ff272f12eeb0cc8c847f6001faeb15e79810880e","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/interface-ipfs-core/raw/master/img/badge.png)](https://github.com/ipfs/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/interface-ipfs-core/tree/master/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs/master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.55","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-PjhCtx8n5ep0cMnj5OQStjnmR6KBVX+7UVoaRbLKUF2b1OAZnxu0lkk6sv6XWHHMVYwy8hGRWJqXqfI+l3GNZQ==","shasum":"ef9952dfcffa7a60d23660d8cfa68947ffc25a42","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.55.tgz","fileCount":280,"unpackedSize":570789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaOBICRA9TVsSAnZWagAAc1sP/33G2YHmXMQ4aPM+nfVF\nTwOhsXTAyUHHXrPDGONRBKIu9+5sCJW5K/lcCokw8TXj9jzA2M37HObn4i0/\nAQc+4B1zVNXDiR+tQW4JKjvjFyVoc4B9x1cxI3L8Xn4IRACGCmtt5XfoojUb\nursZC2+GwzyKHHVwYokUKsHkWv2b/3h0O8DOtWXzzl/SAMfNzJT1T7VlOkkU\nCBoL6gyeemVKKTAZANxkORwD82G/uvzKjSnIuCq67e/t9WoN6BZ7S+iKQ9C9\n0bM+KhvvmC3x3A2DMa1vWJgsTKo1G4+e/qoQywfsqxX/S9v97UL5GJFQpQcu\nxCWL467XYss2mafEwVS1Q5qqyi1rWO+LfDgz2tM7m6L+K1j8X+/olW3rYGn5\nSnzsXk0H420aLpKchIP4Q7qLo1qr4tsan9Tx8+BO3M+E2851aQpwh8A91aGv\nEt00RSxLJfA7eq64R/bfT0R17kM/xAODT7h1QHAujcFbBPMweFKHhQEu0zn7\n27kj+CYfAzCwyn/xCSCMgN3YC9hqTizajJqh70/KDsT9Zy4Eto9YMH16lUmM\nXzwZPiZBRUKp+bgfaHuf3vxjXk0iFOKSiAB2S6UQkxHELQFvZ8AB/fiE3+Zd\nJAGkDjq2nb0u3TD5O8uA/mcP3vCn+TnEIB+/55zOouP6SWDJ6mnRr3uJBztI\nIeqc\r\n=UQ77\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAvVuO26zvN0JNf3a5AZNMgKQxbbsVhlFPXNw/aKnNj0AiBDQyA8KkIFf3xthtFxqmDuz5dpoQhY/47gW7a8b5J4tA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.55_1583931464396_0.34601991612298577"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.49":{"name":"ipfs","version":"0.41.3-rc.49","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-http-client":"^42.0.1-rc.49+bfba767","ipfs-http-response":"^0.5.0","ipfs-mfs":"^1.0.1-rc.49+bfba767","ipfs-multipart":"^0.3.1-rc.49+bfba767","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^0.7.3-rc.49+bfba767","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","ky":"^0.15.0","ky-universal":"^0.3.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.2","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.0","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.1","libp2p-tcp":"^0.14.2","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","hat":"0.0.3","interface-ipfs-core":"^0.132.1-rc.49+bfba767","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","it-first":"^1.0.1","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"bfba76748b8aabc0d66768009ff6f4adb24ff439","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs/master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`ipfs-multipart`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.49","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-BwhWicwL/2Y+RDmPU6arZT8fUg4JAStV0XP5fYz9qlbPqivNgYcH3GICGnnmAM2cEx9DeNUft/kdYYRfwZ3zbA==","shasum":"9be8a640806543a62bf7bb0f5af7da4ad4a740b2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.49.tgz","fileCount":280,"unpackedSize":573630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea+VLCRA9TVsSAnZWagAAXg0P/jYquaW1LA3wSWu+/ejr\nhbDpNc1W08bo0qF5OFqjpH4SybrwEdfKbd3eAB+B0mXFOhKzmufHCVLptin9\njgPp2GlPdRl5FrvK7akVnjCTVue3+orj5EGsCRMCqbJACtAPQeaoe1oNGTPh\nDnOE4H2MOFC1TCT5JTXX4x+aSpUlX/fiUCTcL6jw1RW4HpesjiY0Fl0oQLKI\n+H0tWdJg6CdJjmv71rCQIP9epbsBhvwNLShlt7ysI3G1LTuREMs6DMT/govT\nyKTwEse7XthK2r116ObaEwKjErv4nJvBsLVgCmG6bbSUzHt+sfAVtgEmfMyE\nUVPj2KuUP0QMDAsFVs8nidens/0qiZFTnF1kHmna0ZwhdDXx/nkagsekFOlL\nxkPPWVn09GbZLN86AHEhEIAUUhK/2JK5NwfFdm8eOS07IRS69rL5J94W9XUZ\nI3XB93idBLDxeFnvlhEFSkvffFoV2k49wk7yxzOsj6GprKBw7RXXe+7MfsOv\nfa+MQKNd2EckvI0k7bFvhbdhPonWa8Lpm/73qi6VC7d0CHRqI0evSZ2aQV/p\n+qSaFu6G076LCZGhiCuxqqmpW88cKgaAa2EolnXIUUHMLO/1Nzrk0b3aQarK\nTsJa+Y2DfdnAeLurPJPQ/YdmwoSO/0QqVA9KIsuFcxhU+zPffsfZ0m78YhZR\npEE7\r\n=WqRq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4/q8Uzm/KhN3NFb076p4zn3vCtY6VQDAYVQkfuB8RagIgMTeRuUBmMkWo4P8pkSEpmfMO/w9Wz00jJvHIcr903tc="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.49_1584129354695_0.2687287020532392"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5598":{"name":"ipfs","version":"0.41.3-rc.5598","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.0","ipfs-http-client":"^42.0.1-rc.5598+a01f5b63","ipfs-http-response":"^0.5.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.2.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^2.1.11","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"a01f5b63cd92d225b10eff497f79caf4baab1973","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs/master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5598","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-RoN1EFVPV9hvtXJcyjqm+0DjxkdwSXqtP8Fm0fiod+N0DUX4KdyEM1a2nywVOMGi7tRJ6V9PGpztkLH7eHpI4A==","shasum":"a6f128879570e8e522b5f98f02f82e2a73d9a327","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5598.tgz","fileCount":338,"unpackedSize":715658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefHi+CRA9TVsSAnZWagAA/C0P/iGgdcsr/Fps0XQfiWAW\nAvuqAxth9WmBKRDO9qD7AGwsBfMVXWrylujKNjELj1hMMuIERvFsKy0ov+NP\nlLQk2QBUBVaXjcRplkYYTv5wYuiaNLK3Xte4Bb54f3Mpw39iC8w60I3Tp7Do\noCnjO7AZViU0luKPkYFd8Dl6OjqOn49XvmJ7Too8X57IkAMrzYykwrMaVhSc\nKwz9+MrqNZui2iMdvGirpE5dkLvY590BfaUnMxp55O/jAU5rvT8acpP5r5Ej\nvnbh6nyIvELrA+vr6FnTOFN23ulFyKO+2AHy2RCuiyVPlKNySdxH11ERuEQT\ntuDcn70UetMr7tPvjRR0//eF7MgtRcNfFh4InkLpcrELBtRLL7LreFPLpZuz\n3JUiMFR+B4pi83Cw286gKrUVOvAD3pWLdQBIS5XgkiVPF21Yl34rp0UAVl1G\nNv1GWyioxXmgmjENF+vVpi5r/kleq1JsKNNfscuunqW/SnhEG5wDBQvmDRu1\npLv7ES9u7OWuDV2vr9UkaUpejop6yk/Vm5KuG1urkuJaa5EnC7uCQdj0EWyl\n/06A8OOXjdR2papdDP7m4WxQm1vr02T0ywc/gZZy9DT60ZAOlsD8AbyIyP5z\nyx0JW97on5tzHjFrr1sNNMBKuJofDLznS1DSr+QyFyfIgA068ZKTpKYRq7wu\n20/B\r\n=YOE3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQOOwhB5sNQqadrdb3SUBTM7bYO64xBn0wrVPAT5gmsQIgV4TFXJED2eHHOKm09YVVoIgjfPf52a/dihrxu4Htbbo="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5598_1585215678139_0.7399908656690071"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5605":{"name":"ipfs","version":"0.41.3-rc.5605","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.2.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^2.1.11","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"819040c1dcbd321487c2f9af2ae23778665cf83b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs/master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n.\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5605","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-DnWmGLdfojFTmAqIF1/c4eGdPpl4VxasoOMzC8UKM8ESQRZdAQnQ/MUuH4avy9dBUYzLNNnUAGY4CsCvd1UPbg==","shasum":"06b2f2c84d63697b1cf7e279f7b1663e71f640bb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5605.tgz","fileCount":338,"unpackedSize":22988962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefM2ACRA9TVsSAnZWagAAYioP/A9pHEGgbEXlC25zeEc/\nRztJUzjiiwpy5J1c7mNVzumH0iaUOJ+ddW8lZA2cE5Di5GplAugDiw1eJJYx\nGR8NHXMi/TmwWmPcYU4NbHXGdcXoukBh9i27KQRS65UHp104TANMqqiubpfb\nucjc2Jt/vLFj+RtsTSXsjVn/uR2NtI5a5ULYiF/Lfmq7glpeUEKLl0t4eUGr\n3dh0JQt7nc+i5MtJjk1c3on5lcdf6aN3lyNyZ10p8oFwDsSmXYxzGE0j5tPF\nOGTg2K4NruUxDj/ta/5rtSM2BIwQ17wtBNDW7jyrDQeDI3rMs+BbKvGM4k4x\nVwZqFMZx0lQcj76Tkfa/L4NAyFrc9NItieb4YNeKhDJMK+kIjR15Xp0URSrI\nikv1KJX9GBq8adht9uaLycjNSZL5+tsvYQqWJBIuaoqR2gBcbroHogKVhtGq\nGRK5vBb+34e07rY+GNRw3ANLZKcnJNXKbjbxnEBT/uMitgNuZmO3xibDlLbU\nAMZVjIaHLhEQGR0XZUrHQqHu1a1npfEZ4cvlwrt7QdWJFGoh1MmNjO1VXjqO\nGqHHBm9b52DCJRP4IJK+l35KZLW5XBGng5PtovSKoSz3p+ZRVuCkNfTKP4jx\n05a7NxwSAOt9inQatQ3NRtmt/U/VlxR2jRoGyQbPjB8/rVxmTvEJ2OgJ2Jpg\nS2SM\r\n=/Zyw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBgfTtWp3R745eMnTkH4lAZJuAy6DSYDvT6YcpHKl3jXAiEAp57YtAyoQHLxlOaD0b/XK3NzOeI2kwaYWjAcJMA6sBM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5605_1585237375917_0.38595402954433555"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5606":{"name":"ipfs","version":"0.41.3-rc.5606","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.2.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^2.1.11","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"a9d09da3007534d48a26b2b7b3a36d77cc1ec6f0","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol.</h3>\n\n<p align=\"center\">\n  <a href=\"http://protocol.ai\"><img src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat\" /></a>\n  <a href=\"http://ipfs.io/\"><img src=\"https://img.shields.io/badge/project-IPFS-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\n### Project status - `Alpha` <!-- omit in toc -->\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, API might change, beware of the Dragons 🐉.\n\n**Want to get started?** Check our [examples folder](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser.\n\n**Please read this:** The [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table), a fundamental piece for automatic content and peer discovery is not yet complete. There are multiple applications that can be built without this service but nevertheless it is fundamental to getting that magic IPFS experience. The current status is that implementation is done and merged and we're working on performance issues. Expect the DHT to be available in a release very soon.\n\n[**`Weekly Core Implementations Call`**](https://github.com/ipfs/team-mgmt/issues/992)\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alan Shaw](https://github.com/alanshaw)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Install](#install)\n  - [npm](#npm)\n  - [Use in Node.js](#use-in-nodejs)\n  - [Through command line tool](#through-command-line-tool)\n  - [Use in the browser](#use-in-the-browser)\n- [Usage](#usage)\n  - [IPFS CLI](#ipfs-cli)\n  - [IPFS Daemon](#ipfs-daemon)\n  - [IPFS Module](#ipfs-module)\n  - [Tutorials and Examples](#tutorials-and-examples)\n  - [API](#api)\n    - [IPFS Constructor](#ipfs-constructor)\n      - [`options.repo`](#optionsrepo)\n      - [`options.repoAutoMigrate`](#optionsrepoautomigrate)\n      - [`options.init`](#optionsinit)\n      - [`options.start`](#optionsstart)\n      - [`options.pass`](#optionspass)\n      - [`options.silent`](#optionssilent)\n      - [`options.relay`](#optionsrelay)\n      - [`options.offline`](#optionsoffline)\n      - [`options.preload`](#optionspreload)\n      - [`options.EXPERIMENTAL`](#optionsexperimental)\n      - [`options.config`](#optionsconfig)\n        - [Configuring Delegate Routers](#configuring-delegate-routers)\n      - [`options.ipld`](#optionsipld)\n      - [`options.libp2p`](#optionslibp2p)\n      - [`options.connectionManager`](#optionsconnectionmanager)\n    - [`node.start()`](#nodestart)\n    - [`node.stop()`](#nodestop)\n    - [Core API](#core-api)\n    - [Files](#files)\n    - [Graph](#graph)\n    - [Block](#block)\n    - [Name](#name)\n    - [Crypto and Key Management](#crypto-and-key-management)\n    - [Network](#network)\n    - [Node Management](#node-management)\n    - [Static types and utils](#static-types-and-utils)\n      - [Glob source](#glob-source)\n        - [`globSource(path, [options])`](#globsourcepath-options)\n        - [Example](#example)\n      - [URL source](#url-source)\n        - [`urlSource(url)`](#urlsourceurl)\n        - [Example](#example-1)\n- [FAQ](#faq)\n    - [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)\n    - [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)\n    - [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)\n    - [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)\n    - [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)\n    - [Have more questions?](#have-more-questions)\n- [Running js-ipfs with Docker](#running-js-ipfs-with-docker)\n- [Packages](#packages)\n- [Development](#development)\n  - [Clone and install dependencies](#clone-and-install-dependencies)\n  - [Run tests](#run-tests)\n  - [Run interop tests](#run-interop-tests)\n  - [Run benchmark tests](#run-benchmark-tests)\n  - [Lint](#lint)\n  - [Build a dist version](#build-a-dist-version)\n  - [Runtime Support](#runtime-support)\n  - [Code Architecture and folder Structure](#code-architecture-and-folder-structure)\n      - [Source code](#source-code)\n  - [Monitoring](#monitoring)\n  - [IPFS Architecture](#ipfs-architecture)\n- [Contribute](#contribute)\n  - [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Install\n\n### npm\n\nThis project is available through [npm](https://www.npmjs.com/). To install, run:\n\n```bash\n> npm install ipfs\n```\n\nJS IPFS depends on native modules that are installed by [`node-gyp`](https://github.com/nodejs/node-gyp). If you have problems running the command above, it is likely that the [build tools required by `node-gyp`](https://github.com/nodejs/node-gyp#installation) are missing from your system. Please install them and then try again.\n\nWe support both the Current and Active LTS versions of Node.js. Please see [nodejs.org](https://nodejs.org/) for what these currently are.\n\nThis project is tested on macOS, Linux and Windows.\n\n### Use in Node.js\n\nTo create an IPFS node programmatically:\n\n```js\nconst IPFS = require('ipfs')\nconst node = await IPFS.create()\n\n// Ready to use!\n// See https://github.com/ipfs/js-ipfs#core-api\n```\n\n### Through command line tool\n\nIn order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):\n\n```bash\nnpm install ipfs --global\n```\n\nThe CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).\n\nOnce installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.\n\n### Use in the browser\n\nLearn how to bundle with browserify and webpack in the [`examples`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples) folder.\n\nYou can also load it using a `<script>` using the [jsDelivr](https://www.jsdelivr.com/package/npm/ipfs) CDN. Inserting one of the following lines will make an `Ipfs` object available in the global namespace.\n\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n## Usage\n\n### IPFS CLI\n\nThe `jsipfs` CLI, available when `js-ipfs` is installed globally, follows (should, it is a WIP) the same interface defined by `go-ipfs`, you can always use the `help` command for help menus.\n\n```sh\n# Install js-ipfs globally\n> npm install ipfs --global\n> jsipfs --help\nCommands:\n  bitswap               A set of commands to manipulate the bitswap agent.\n  block                 Manipulate raw IPFS blocks.\n  bootstrap             Show or edit the list of bootstrap peers.\n  commands              List all available commands\n  config <key> [value]  Get and set IPFS config values\n  daemon                Start a long-running daemon process\n# ...\n```\n\n`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:\n\n- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)\n- default swarm port: `4002`\n- default API port: `5002`\n\n### IPFS Daemon\n\nThe IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [js-ipfs-http-client](https://github.com/ipfs/js-ipfs-http-client).\n\nIf you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out [ipfsd-ctl module](https://github.com/ipfs/js-ipfsd-ctl)\n\n### IPFS Module\n\nUse the IPFS Module as a dependency of a project to __spawn in process instances of IPFS__. Create an instance by calling `await IPFS.create()`:\n\n```js\n// Create the IPFS node instance\nconst node = await IPFS.create()\n// Your node is now ready to use \\o/\nawait node.stop()\n// node is now 'offline'\n```\n\n### [Tutorials and Examples](/examples)\n\nYou can find some examples and tutorials in the [examples](/examples) folder, these exist to help you get started using `js-ipfs`.\n\n### API\n\n#### IPFS Constructor\n\n```js\nconst node = await IPFS.create([options])\n```\n\nCreates and returns a ready to use instance of an IPFS node.\n\nUse the `options` argument to specify advanced configuration. It is an object with any of these properties:\n\n##### `options.repo`\n\n| Type | Default |\n|------|---------|\n| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |\n\nThe file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.\n\nExample:\n\n```js\n// Store data outside your user directory\nconst node = await IPFS.create({ repo: '/var/ipfs/data' })\n```\n\n##### `options.repoAutoMigrate`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.\n\n**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic\nmigrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such\na case, you should provide a way to trigger migrations manually.**\n\n##### `options.init`\n\n| Type | Default |\n|------|---------|\n| boolean or object | `true` |\n\nPerform repo initialization steps when creating the IPFS node.\n\nNote that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.\n\nInstead of a boolean, you may provide an object with custom initialization options. All properties are optional:\n\n- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)\n- `bits` (number) Number of bits to use in the generated key pair. (Default: `2048`)\n- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**\n    ```js\n    // Generating a Peer ID:\n    const PeerId = require('peer-id')\n    // Generates a new Peer ID, complete with public/private keypair\n    // See https://github.com/libp2p/js-peer-id\n    const peerId = await PeerId.create({ bits: 2048 })\n    ```\n- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).\n- `profiles` (Array) Apply profile settings to config.\n- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.\n\n##### `options.start`\n\n| Type | Default |\n|------|---------|\n| boolean | `true` |\n\n If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.\n\n##### `options.pass`\n\n| Type | Default |\n|------|---------|\n| string | `null` |\n\nA passphrase to encrypt/decrypt your keys.\n\n##### `options.silent`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nPrevents all logging output from the IPFS node.\n\n##### `options.relay`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, hop: { enabled: false, active: false } }` |\n\nConfigure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/examples/circuit-relaying) to learn more).\n\n- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)\n- `hop` (object)\n    - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)\n    - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)\n\n##### `options.offline`\n\n| Type | Default |\n|------|---------|\n| Boolean | `false` |\n\nRun ipfs node offline. The node does not connect to the rest of the network but provides a local API.\n\n##### `options.preload`\n\n| Type | Default |\n|------|---------|\n| object | `{ enabled: true, addresses: [...] }` |\n\nConfigure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.\n\n- `enabled` (boolean): Enable content preloading (Default: `true`)\n- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).\n\n##### `options.EXPERIMENTAL`\n\n| Type | Default |\n|------|---------|\n| object | `{ ipnsPubsub: false, sharding: false }` |\n\nEnable and configure experimental features.\n\n- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)\n- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)\n\n##### `options.config`\n\n| Type | Default |\n|------|---------|\n| object |  [`config-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-nodejs.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/config-browser.js) in browsers |\n\nModify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](docs/config.md).\n\n###### Configuring Delegate Routers\n\nIf you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).\n\nIf you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.\n\nAvailable delegate multiaddrs are:\n- `/dns4/node0.delegate.ipfs.io/tcp/443/https`\n- `/dns4/node1.delegate.ipfs.io/tcp/443/https`\n\n**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.\n\n**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](#optionslibp2p). See the module repos for further instructions:\n\n- https://github.com/libp2p/js-libp2p-delegated-content-routing\n- https://github.com/libp2p/js-libp2p-delegated-peer-routing\n\n##### `options.ipld`\n\n | Type | Default |\n|------|---------|\n| object |  [`ipld-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-nodejs.js) in Node.js, [`ipld-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core/runtime/ipld-browser.js) in browsers |\n\n Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.\n\n > Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.\n\n To add support for other formats we provide two options, one sync and another async.\n\n Examples for the sync option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nimport ipldGit from 'ipld-git'\nimport ipldBitcoin from 'ipld-bitcoin'\n\nconst node = await IPFS.create({\n  ipld: {\n    formats: [ipldGit, ipldBitcoin]\n  }\n})\n```\n</details>\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    formats: [require('ipld-git'), require('ipld-bitcoin')]\n  }\n})\n```\n</details>\n<details><summary>Using script tags</summary>\n\n```html\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-git/dist/index.min.js\"></script>\n<script src=\"https://unpkg.com/ipld-bitcoin/dist/index.min.js\"></script>\n<script>\nasync function main () {\n  const node = await self.IPFS.create({\n    ipld: {\n      formats: [self.IpldGit, self.IpldBitcoin]\n    }\n  })\n}\nmain()\n</script>\n```\n</details>\n\n Examples for the async option:\n\n<details><summary>ESM Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return import('ipld-git') // This is a dynamic import\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.\n\nUsing dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.\n\nWith Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: \"ipld-formats\" */ 'ipld-git')` to produce a single file with all of them.\n</details>\n\n<details><summary>Commonjs Environments</summary>\n\n```js\nconst node = await IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      if (codec === multicodec.GIT_RAW) {\n        return require('ipld-git')\n      } else {\n        throw new Error('unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n```\n</details>\n\n<details><summary>Using Script tags</summary>\n\n```js\n<script src=\"https://unpkg.com/ipfs/dist/index.min.js\"></script>\n<script>\nconst load = (name, url) => new Promise((resolve, reject) => {\n  const script = document.createElement('script')\n  script.src = url\n  script.onload = () => resolve(self[name])\n  script.onerror = () => reject(new Error('Failed to load ' + url))\n  document.body.appendChild(script)\n})\n\nconst node = await self.IPFS.create({\n  ipld: {\n    async loadFormat (codec) {\n      switch (codec) {\n        case multicodec.GIT_RAW:\n          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')\n        case multicodec.BITCOIN_BLOCK:\n          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')\n        default:\n          throw new Error('Unable to load format ' + multicodec.print[codec])\n      }\n    }\n  }\n})\n</script>\n```\n</details>\n\n\n##### `options.libp2p`\n\n| Type | Default |\n|------|---------|\n| object | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/src/core/runtime/libp2p-browser.js) in browsers |\n| function | [`libp2p bundle`](examples/custom-libp2p) |\n\nThe libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.\n\nYou can see the bundle in action in the [custom libp2p example](examples/custom-libp2p).\n\n- `modules` (object):\n    - `transport` (Array<[libp2p.Transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport)>): An array of Libp2p transport classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/transport](https://github.com/libp2p/js-interfaces/tree/master/src/transport) for details.\n    - `peerDiscovery` (Array<[libp2p.PeerDiscovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery)>): An array of Libp2p peer discovery classes/instances to use _instead_ of the defaults. See [libp2p/js-interfaces/peer-discovery](https://github.com/libp2p/js-interfaces/tree/master/src/peer-discovery) for details. If passing a class, configuration can be passed using the config section below under the key corresponding to you module's unique `tag` (a static property on the class)\n    - `dht` (object): a DHT implementation that enables PeerRouting and ContentRouting. Example [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht)\n    - `pubsub` (object): a Pubsub implementation on top of [libp2p/js-libp2p-pubsub](https://github.com/libp2p/js-libp2p-pubsub)\n    - `contentRouting` (Array<[libp2p.ContentRouting](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing)>): An array of Libp2p content routing modules. See [libp2p/js-interfaces/content-routing](https://github.com/libp2p/js-interfaces/tree/master/src/content-routing) for details.\n    - `peerRouting` (Array<[libp2p.PeerRouting](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing)>): An array of Libp2p peer routing modules. See [libp2p/js-interfaces/peer-routing](https://github.com/libp2p/js-interfaces/tree/master/src/peer-routing) for details.\n- `config` (object):\n    - `peerDiscovery` (object):\n        - `autoDial` (boolean): Dial to discovered peers when under the Connection Manager min peer count watermark. (default `true`)\n        - `[PeerDiscovery.tag]` (object): configuration for a peer discovery module\n            - `enabled` (boolean): whether this module is enabled or disabled\n            - `[custom config]` (any): other keys are specific to the module\n    - `dht` (object): Configuration options for the DHT (WARNING: the current DHT implementation has performance issues, your mileage may vary)\n        - `enabled` (boolean): whether the DHT is enabled or not (default `false`)\n        - `kBucketSize` (number): bucket size (default `20`)\n        - `randomWalk` (object): configuration for random walk\n            - `enabled` (boolean): whether random DHT walking is enabled (default `false`)\n    - `pubsub` (object): Configuration options for Pubsub\n        - `enabled` (boolean): if pubbsub subsystem should be enabled (default: `false`)\n        - `emitSelf` (boolean): whether the node should emit to self on publish, in the event of the topic being subscribed (default: `true`)\n        - `signMessages` (boolean): if messages should be signed (default: `true`)\n        - `strictSigning` (boolean): if message signing should be required (default: `true`)\n\n##### `options.connectionManager`\n\n| Type | Default |\n|------|---------|\n| object | [defaults](https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager) |\n\nConfigure the libp2p connection manager.\n\n#### `node.start()`\n\nStart listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create({ start: false })\nconsole.log('Node is ready to use but not started!')\n\ntry {\n  await node.start()\n  console.log('Node started!')\n} catch (error) {\n  console.error('Node failed to start!', error)\n}\n```\n\n#### `node.stop()`\n\nClose and stop listening for connections with other IPFS nodes, then release access to the node’s repo.\n\nThis method is asynchronous and returns a promise.\n\n```js\nconst node = await IPFS.create()\nconsole.log('Node is ready to use!')\n\ntry {\n  await node.stop()\n  console.log('Node stopped!')\n} catch (error) {\n  console.error('Node failed to stop!', error)\n}\n```\n\n#### Core API\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n\nThe IPFS core API provides all functionality that is not specific to setting up and starting or stopping a node. This API is available directly on an IPFS instance, on the command line (when using the CLI interface), and as an HTTP REST API. For a complete reference, see [![](https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core).\n\nThe core API is grouped into several areas:\n\n#### Files\n\n- [Regular Files API](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md)\n  - [`ipfs.add(data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#add)\n  - [`ipfs.cat(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#cat)\n  - [`ipfs.get(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#get)\n  - [`ipfs.ls(ipfsPath)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#ls)\n- [MFS (mutable file system) specific](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#mutable-file-system)\n  - [`ipfs.files.chmod(path, mode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileschmod)\n  - [`ipfs.files.cp([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filescp)\n  - [`ipfs.files.flush([path])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesflush)\n  - [`ipfs.files.ls([path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesls)\n  - [`ipfs.files.mkdir(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmkdir)\n  - [`ipfs.files.mv([from, to])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesmv)\n  - [`ipfs.files.read(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesread)\n  - [`ipfs.files.rm(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesrm)\n  - [`ipfs.files.stat(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filesstat)\n  - [`ipfs.files.touch(path, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#filestouch)\n  - [`ipfs.files.write(path, content, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/FILES.md#fileswrite)\n\n- [refs](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md)\n  - [`ipfs.refs(ipfsPath, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refs)\n  - [`ipfs.refs.local()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REFS.md#refslocal)\n\n#### Graph\n\n- [dag](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md)\n  - [`ipfs.dag.put(dagNode, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagput)\n  - [`ipfs.dag.get(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagget)\n  - [`ipfs.dag.tree(cid, [path], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DAG.md#dagtree)\n\n- [pin](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md)\n  - [`ipfs.pin.add(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinadd)\n  - [`ipfs.pin.ls([hash], [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinls)\n  - [`ipfs.pin.rm(hash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PIN.md#pinrm)\n\n- [object](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md)\n  - [`ipfs.object.new([template])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectnew)\n  - [`ipfs.object.put(obj, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectput)\n  - [`ipfs.object.get(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectget)\n  - [`ipfs.object.data(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectdata)\n  - [`ipfs.object.links(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectlinks)\n  - [`ipfs.object.stat(multihash, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectstat)\n  - [`ipfs.object.patch.addLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchaddlink)\n  - [`ipfs.object.patch.rmLink(multihash, DAGLink, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchrmlink)\n  - [`ipfs.object.patch.appendData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchappenddata)\n  - [`ipfs.object.patch.setData(multihash, data, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/OBJECT.md#objectpatchsetdata)\n\n#### Block\n\n- [block](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md)\n  - [`ipfs.block.get(cid, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockget)\n  - [`ipfs.block.put(block, cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockput)\n  - [`ipfs.block.rm(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockrm)\n  - [`ipfs.block.stat(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BLOCK.md#blockstat)\n- [bitswap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md)\n  - [`ipfs.bitswap.wantlist([peerId])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapwantlist)\n  - [`ipfs.bitswap.stat()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BITSWAP.md#bitswapstat)\n\n#### Name\n\n- [name](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md)\n  - [`ipfs.name.publish(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepublish)\n  - [`ipfs.name.pubsub.cancel(arg)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubcancel)\n  - [`ipfs.name.pubsub.state()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubstate)\n  - [`ipfs.name.pubsub.subs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#namepubsubsubs)\n  - [`ipfs.name.resolve(value, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/NAME.md#nameresolve)\n\n#### Crypto and Key Management\n\n- [key](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md)\n  - [`ipfs.key.export(name, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyexport)\n  - [`ipfs.key.gen(name, options)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keygen)\n  - [`ipfs.key.import(name, pem, password)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyimport)\n  - [`ipfs.key.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keylist)\n  - [`ipfs.key.rename(oldName, newName)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrename)\n  - [`ipfs.key.rm(name)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/KEY.md#keyrm)\n\n- crypto (not implemented yet)\n\n#### Network\n\n- [bootstrap](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md)\n  - [`ipfs.bootstrap.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraplist)\n  - [`ipfs.bootstrap.add(addr, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstrapadd)\n  - [`ipfs.bootstrap.rm(peer, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/BOOTSTRAP.md#bootstraprm)\n\n- [dht](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md)\n  - [`ipfs.dht.findPeer(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindpeer)\n  - [`ipfs.dht.findProvs(multihash)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtfindprovs)\n  - [`ipfs.dht.get(key)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtget)\n  - [`ipfs.dht.provide(cid)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtprovide)\n  - [`ipfs.dht.put(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtput)\n  - [`ipfs.dht.query(peerId)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/DHT.md#dhtquery)\n\n- [pubsub](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md)\n  - [`ipfs.pubsub.subscribe(topic, handler, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubsubscribe)\n  - [`ipfs.pubsub.unsubscribe(topic, handler)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubunsubscribe)\n  - [`ipfs.pubsub.publish(topic, data)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpublish)\n  - [`ipfs.pubsub.ls(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubls)\n  - [`ipfs.pubsub.peers(topic)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/PUBSUB.md#pubsubpeers)\n\n- [libp2p](https://github.com/libp2p/interface-libp2p). Every IPFS instance also exposes the libp2p SPEC at `ipfs.libp2p`. The formal interface for this SPEC hasn't been defined but you can find documentation at its implementations:\n  - [Node.js bundle](./src/core/runtime/libp2p-nodejs.js)\n  - [Browser Bundle](./src/core/runtime/libp2p-browser.js)\n  - [libp2p baseclass](https://github.com/libp2p/js-libp2p)\n\n- [swarm](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md)\n  - [`ipfs.swarm.addrs()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmaddrs)\n  - [`ipfs.swarm.connect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmconnect)\n  - [`ipfs.swarm.disconnect(addr)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmdisconnect)\n  - [`ipfs.swarm.peers([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/SWARM.md#swarmpeers)\n\n#### Node Management\n\n- [miscellaneous operations](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md)\n  - [`ipfs.id()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#id)\n  - [`ipfs.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#version)\n  - [`ipfs.ping(peerId, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#ping)\n  - `ipfs.init([options])`\n  - `ipfs.start()`\n  - [`ipfs.stop()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#stop)\n  - `ipfs.isOnline()`\n  - [`ipfs.resolve(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#resolve)\n  - [`ipfs.dns(name, [options]`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/MISCELLANEOUS.md#dns)\n\n- [repo](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md)\n  - `ipfs.repo.init`\n  - [`ipfs.repo.stat([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repostat)\n  - [`ipfs.repo.version()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repoversion)\n  - [`ipfs.repo.gc([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/REPO.md#repogc)\n\n- [stats](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md)\n  - [`ipfs.stats.bitswap()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbitswap)\n  - [`ipfs.stats.bw([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsbw)\n  - [`ipfs.stats.repo([options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/STATS.md#statsrepo)\n\n- [config](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md)\n  - [`ipfs.config.get([key])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configget)\n  - [`ipfs.config.set(key, value)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configset)\n  - [`ipfs.config.replace(config)`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configreplace)\n  - [`ipfs.config.profiles.list()`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofileslist)\n  - [`ipfs.config.profiles.apply(name, [options])`](https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/SPEC/CONFIG.md#configprofilesapply)\n\n#### Static types and utils\n\nAside from the default export, `ipfs` exports various types and utilities that are included in the bundle:\n\n- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)\n- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)\n- [`Buffer`](https://www.npmjs.com/package/buffer)\n- [`PeerId`](https://www.npmjs.com/package/peer-id)\n- [`PeerInfo`](https://www.npmjs.com/package/peer-info)\n- [`multiaddr`](https://www.npmjs.com/package/multiaddr)\n- [`multibase`](https://www.npmjs.com/package/multibase)\n- [`multihash`](https://www.npmjs.com/package/multihashes)\n- [`multihashing`](https://www.npmjs.com/package/multihashing-async)\n- [`multicodec`](https://www.npmjs.com/package/multicodec)\n- [`CID`](https://www.npmjs.com/package/cids)\n\nThese can be accessed like this, for example:\n\n```js\nconst { CID } = require('ipfs')\n// ...or from an es-module:\nimport { CID } from 'ipfs'\n```\n\n##### Glob source\n\nA utility to allow files on the file system to be easily added to IPFS.\n\n###### `globSource(path, [options])`\n\n- `path`: A path to a single file or directory to glob from\n- `options`: Optional options\n- `options.recursive`: If `path` is a directory, use option `{ recursive: true }` to add the directory and all its sub-directories.\n- `options.ignore`: To exclude file globs from the directory, use option `{ ignore: ['ignore/this/folder/**', 'and/this/file'] }`.\n- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { globSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(globSource('./docs', { recursive: true }))) {\n  console.log(file)\n}\n/*\n{\n  path: 'docs/assets/anchor.js',\n  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),\n  size: 15347\n}\n{\n  path: 'docs/assets/bass-addons.css',\n  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),\n  size: 232\n}\n...\n*/\n```\n\n##### URL source\n\nA utility to allow content from the internet to be easily added to IPFS.\n\n###### `urlSource(url)`\n\n- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to\n\nReturns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.\n\n###### Example\n\n```js\nconst IPFS = require('ipfs')\nconst { urlSource } = IPFS\nconst ipfs = await IPFS.create()\nfor await (const file of ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))) {\n  console.log(file)\n}\n/*\n{\n  path: 'ipfs-logo.svg',\n  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),\n  size: 3243\n}\n*/\n```\n\n## FAQ\n\n#### How to enable WebRTC support for js-ipfs in the Browser\n\nTo add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:\n\n```JavaScript\nconst node = await IPFS.create({\n  config: {\n    Addresses: {\n      Swarm: [\n        '/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\n**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.\n\n#### Is there WebRTC support for js-ipfs with Node.js?\n\nYes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:\n\n- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.\n- [electron-webrtc](https://npmjs.org/electron-webrtc)\n\nTo add WebRTC support in a IPFS node instance, do:\n\n```JavaScript\nconst wrtc = require('wrtc') // or require('electron-webrtc')()\nconst WStar = require('libp2p-webrtc-star')\nconst wstar = new WStar({ wrtc })\n\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  // start: false,\n  config: {\n    Addresses: {\n      Swarm: [\n        \"/ip4/0.0.0.0/tcp/4002\",\n        \"/ip4/127.0.0.1/tcp/4003/ws\",\n        \"/dns4/wrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star\"\n      ]\n    }\n  },\n  libp2p: {\n    modules: {\n      transport: [wstar],\n      peerDiscovery: [wstar.discovery]\n    }\n  }\n})\n\n// your instance with WebRTC is ready\n```\n\nTo add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:\n\n```bash\nnpm install wrtc --global\n# or\nnpm install electron-webrtc --global\n```\n\nThen, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `\"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star\"`\n\n#### How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?\n\nYou'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:\n\n- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`\n\n```JavaScript\nconst node = await IPFS.create({\n  repo: 'your-repo-path',\n  config: {\n    Addresses: {\n      Swarm: [\n        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'\n      ]\n    }\n  }\n})\n```\n\nThe code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.\n\n#### I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?\n\nYes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.\n\nA way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)\n\n#### Can I use IPFS in my Electron App?\n\nYes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.\n\nWe now support Electron v5.0.0 without the need to rebuilt native modules.\nStill if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).\n\n#### Have more questions?\n\nAsk for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).\n\n## Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/\n\nAll branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.\n\nYou can run js-ipfs like this:\n\n```\n$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest\n\ninitializing ipfs node at /root/.jsipfs\ngenerating 2048-bit RSA keypair...done\npeer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nto get started, enter:\n\n         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme\n\nInitializing daemon...\nUsing wrtc for webrtc support\nSwarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nSwarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\nAPI is listening on: /ip4/0.0.0.0/tcp/5002\nGateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090\nDaemon is ready\n\n$ curl --silent localhost:5002/api/v0/id | jq .ID\n\"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS\"\n```\n\n\n## Packages\n\nListing of the main packages used in the IPFS ecosystem. There are also three specifications worth linking here:\n\n- [`interface-ipfs-core`](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n- [`HTTP API spec`](https://docs.ipfs.io/reference/api/http)\n- [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli)\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-mfs`](//github.com/ipfs/js-ipfs-mfs) | [![npm](https://img.shields.io/npm/v/ipfs-mfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-mfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-mfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-mfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-mfs/master)](https://travis-ci.com/ipfs/js-ipfs-mfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-mfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-mfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n## Development\n\n### Clone and install dependencies\n\n```sh\n> git clone https://github.com/ipfs/js-ipfs.git\n> cd js-ipfs\n> npm install\n```\n\n### Run tests\n\n```sh\n# run all the unit tests\n> npm test\n\n# run individual tests (findprovs)\n> npm run test -- --grep findprovs\n\n# run just IPFS tests in Node.js\n> npm run test:node\n\n# run just IPFS core tests\n> npm run test:node:core\n\n# run just IPFS HTTP-API tests\n> npm run test:node:http\n\n# run just IPFS CLI tests\n> npm run test:cli\n\n# run just IPFS core tests in the Browser (Chrome)\n> npm run test:browser\n\n# run some interface tests (block API) on Node.js\n> npm run test:node:interface -- --grep '.block'\n```\n\n### Run interop tests\n\n\n```sh\n# run the interop tests with the default go-IPFS\n> npm run test:interop\n\n# run the interop tests with a different go-IPFS\n> IPFS_EXEC_GO=/path/to/ipfs npm run test:interop\n```\n\n### Run benchmark tests\n\n```sh\n# run all the benchmark tests\n> npm run benchmark\n\n# run just IPFS benchmarks in Node.js\n> npm run benchmark:node\n\n# run just IPFS benchmarks in Node.js for an IPFS instance\n> npm run benchmark:node:core\n\n# run just IPFS benchmarks in Node.js for an IPFS daemon\n> npm run benchmark:node:http\n\n# run just IPFS benchmarks in the browser (Chrome)\n> npm run benchmark:browser\n```\n\n### Lint\n\n**Conforming to linting rules is a prerequisite to commit to js-ipfs.**\n\n```sh\n> npm run lint\n```\n\n### Build a dist version\n\n```sh\n> npm run build\n```\n\n### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536)\n\n### Code Architecture and folder Structure\n\n![](/img/overview.png)\n\n##### Source code\n\n```Bash\n> tree src -L 2\nsrc                 # Main source code folder\n├── cli             # Implementation of the IPFS CLI\n│   └── ...\n├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec\n├── core            # IPFS implementation, the core (what gets loaded in browser)\n│   ├── components  # Each of IPFS subcomponent\n│   └── ...\n└── ...\n```\n\n### Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about\nthe running js-ipfs node and other Node.js metrics.\n\nTo enable it, you need to set the environment variable `IPFS_MONITORING` (any value)\n\nOnce the environment variable is set and the js-ipfs daemon is running, you can get\nthe metrics (in prometheus format) by making a GET request to the following endpoint:\n\n```\nhttp://localhost:5002/debug/metrics/prometheus\n```\n\n### IPFS Architecture\n\n![](/img/architecture.png)\n\n[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)\n\nWhat does this image explain?\n\n- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.\n- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.\n- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).\n- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.\n- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.\n\n## Contribute\n\nIPFS implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- Go through the modules below and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.\n- **Perform code reviews**. More eyes will help (a) speed the project along, (b) ensure quality, and (c) reduce possible future bugs.\n- Take a look at go-ipfs and some of the planning repositories or issues: for instance, the [libp2p spec](https://github.com/ipfs/specs/pull/19). Contributions here that would be most helpful are **top-level comments** about how it should look based on our understanding. Again, the more eyes the better.\n- **Add tests**. There can never be enough tests.\n\n### Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5606","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-/BFUNDZMh6M2BH6gz2rkG7fSC2wpmPKIW07+up+9kNmGjyvqN5IBLEML4IRSkppwyZmrA9ewgY5zrtNf5w+f+A==","shasum":"a05b172e91137d2c34a2d09b6ac9d6a6c315a5ec","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5606.tgz","fileCount":338,"unpackedSize":22988959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefNAeCRA9TVsSAnZWagAASU8P/it0kbxMz58mzDdkSNJ4\nyuOULyz4T7Ig9Iv2KzvbdmnRHg+ucrERx8xXcw0VjeHkqAo/hsVv2BvAp9yT\nBR36M5jKeIXRousUHHWlAwCAk9nhy60UTbzv6p1IRefmqQGNF45EnayOTdvt\nuB+Zguujc6q2j8E7zbuePEnGeaIqktBcDXJWLC/gbIgOofMmui3yOD3cOlAH\nN6pexIFwTHRb+7MAWTLUoyfU5l43gxBUYVDi2LAgBfux62bQuCAZWguzeWFR\nOnHyEZaTm4zeJm69NiFZ13PWNU9x88vTl6PeIVeSslO3dwocCfh2qOWBHf3w\nkVwgg8xyBrpAxYjhmZoXN6tEod2VSHWpSSUQuVO3V3SN1qlaDAbwTGmj692L\nF2jufIBuoNh1GbI8AwBmZCMyd6ZWDQkCgfZu8B4mVhdlJcbTmaMeg8+7i5ZX\nHNgBQGfPUKJ8ljRJmhq6mSAsLa6oA/y3t7j7OemDIBgXEFI+Y4VYMa2Xkuns\nFaZ/9rkQNugT6cAJWEW29pxXWTgvHPm7MLi/yQ9jf7W6f3RR/UHpMNJf4SCu\nM25z+uJRRKhY9hYh8OX6hHFYkjsDp0yfoFzODrctUu/6CobTGANMOcPEDSI4\nSIy7P8VlMIe+K7C57z12x6k3lRf/9RMTlxUQNHmkFbjVJgUdCkHQ0gEpCPB2\nBRGQ\r\n=Ad+3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQTrd5xqrDckqmaJoVKcStZjGXHplUdIhfbz8aeAI2dQIgOOL3diE9r5dktviWeCjcUVdmYHG/uzgNQbIWTM1S33k="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5606_1585238045838_0.05130587678243015"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5614":{"name":"ipfs","version":"0.41.3-rc.5614","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alan Shaw <alan@tableflip.io>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.2.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^2.1.11","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"78cbec159ed84b1bc4cd86eb17d3c2d050827a6d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [How to use IPFS in your application](#how-to-use-ipfs-in-your-application)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### How to use IPFS in your application\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5614","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-tOa92Hm1MVf2Yohz4rlJewfEolhbvcxhglAs800J7Xn0SCQvBQZ7nD/UTFpJ3J9XND/AonPJwgMFXIGmUYJ12w==","shasum":"a49005e448c8f93fc7b01b161cd4e2bef3033270","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5614.tgz","fileCount":338,"unpackedSize":23055419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefhvrCRA9TVsSAnZWagAA67IP/R8bF5ZsdQnJ4v3x2oau\nScRK9AxrGCNmZv3s9TyWzFbYwlXlh4WLmrDrbkg4C5qRBrrI/R2cK0xz7AhW\n43pjHbffqSp7gEvJdlLQzrQ4j5QYGaq33azvm8BL2TBrsI53iVLfI43gv9iZ\nOQHmFvJ3ogCFQK2CE4Ax6qYwfIcty0J8tNLFYLdTTVp65xZZ54gBCmNpH5nU\ncbejDX/8IgkyxE8dgYemTSsVFDkacI6bsYVbNR3hyod0WWdldJNpnfjbwvfq\nMVy4xWyxPVh1nTWUaE8Zzs/E6j66cSp8yQ+l94+MoupvDNTkmA6K3UoBbWJv\nR/jM5/d9jb/VEnNh03wGVuU4F4MR/7aYCYYoO5ynfSuUMLo8YWZK33E0UHaQ\nG5yRhkzQVr4rOa+2PWsavTzDFi+ZF9TTZJ0+gtIIjPLglU4YnJJ/YZrYLZHn\nvT4MBqUc8XwaBCc6pZ7OquIIk4TJdHJqqnHkwTJaH6G4PV19I0XEHbk/3o5t\nPfjs98izQfwTINHkR551D7gKw9fxVTjsyZWMWsc4Xj1h1AAqCwPy7xWfIGiX\nJmcRsJlC4UaHUFzNyqlY4zqdy9Zpu4T0rvm9zwWhXx5XgErCVs2SU5jRxr2D\n21nQirfkPuCmQRKJQHs7CAK/fVot3mNX6+mWkIR4IPmAMYQswJrc8cHTkpZY\nNtry\r\n=X8ou\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDzilkuG02qscNDpzfhtBF55lthTxscO59Hwm9lOKERYAiEA/jjSB6WJF6D8AjTogZVGzu/6FZ5niQqFAVHfq3U3UAA="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5614_1585322986535_0.023570233444666577"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5616":{"name":"ipfs","version":"0.41.3-rc.5616","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.7.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^12.0.1","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.0","ipfs-http-client":"^42.0.1-rc.5616+c2fe4ad3","ipfs-http-response":"^0.5.0","ipfs-repo":"^0.30.1","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.1","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.3.11","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.6.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.3.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^3.2.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.1-rc.5616+c2fe4ad3","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^2.1.11","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^3.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^8.0.4","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^11.5.3","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"c2fe4ad3b3b1da8e49dda84fd0c1927d87bad7dc","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [How to use IPFS in your application](#how-to-use-ipfs-in-your-application)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### How to use IPFS in your application\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5616","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-2blD8fuH8qBcQcJ4rp8p++YuahRguWQLPQFPrS18ZVywOEN7jGCiRU1JilMVcAr5ayp+YS7DQ1M6AFLqFHV+pg==","shasum":"128e10772184de6b273dbe543e3a5e942b3d4211","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5616.tgz","fileCount":338,"unpackedSize":23055573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeflskCRA9TVsSAnZWagAAgg0P/22TbOZNYf7EzUPubPMU\nKt9RkN263OJZPQI5QW1vmIupr3O+FIkTW+lrhsDhL2GQKM/uPSysKmv01PVh\ntJOObdoYzclYOjGJSHakfHN5aqKTpH1sBT7QVQP5sUKvWEsN1plKg+92h/3n\nYuuwBqwPruleIc2iawuU3W00BAQ6T0siMvdvF1Lv931fxXFO/wxGw58KwXHm\nupo+YW2ek2Ma59+Wj4a9iMibwjeI0IZIKxuv/JLdQKljnCpW1ivoCruTu4Sz\nnkN4M4E8dY/A/nZyC/B5YoRbNFGn/UWWu14SwUTXXV5K56RcXqBMw0c/fwcY\nTnYfTCJDDzcdgAFdyV3Udj1Q3sKUT7bmRGt4OXekep4zdnVbwoyKJNqypB80\nLw797jP4rf8uK6KXDxBENw0l0OxB5Ar6CEX4xDyaSAJ5azMV91SPKAMzg1Rt\n/DuMTt7XobNfd3SnOoMY45aTIPefXSg8WXmCNpiWCCznU/RneWA53KFcVu2E\n1PDehDKKwFsJKqYN6y4yKzC05o7XJYci7HRVQEaHFYlcvbivIFnPc9ddLgut\no3LW6SiqEn/bGxDZbxbmAlgj7+X5dGIy3Q6Sb/u5Gg4wAvyxbyHIz+pmomCQ\n0YSw+ccv7V8cuamkzVm9bSOQgLJ5KieGHxprJlIP0So0KAEobwBa3Y4PvkYa\nCWfg\r\n=savU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHlOrc0wk9QPKu8umac7TZFm0eQkTPOR4NBkzMj4whpxAiEA9bgeEdBxqFFGzFNXkoWAmuuAf3/qrzU7XmbfeaxAATU="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5616_1585339171388_0.31455383296775197"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5619":{"name":"ipfs","version":"0.41.3-rc.5619","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.1-rc.5619+b9694a74","ipfs-http-client":"^42.0.1-rc.5619+b9694a74","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.0","ipfs-unixfs":"^1.0.0","ipfs-unixfs-exporter":"^1.0.1","ipfs-unixfs-importer":"^1.0.2","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.1-rc.5619+b9694a74","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"b9694a7455e9b68d956417802e8f71fdae16f51f","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [How to use IPFS in your application](#how-to-use-ipfs-in-your-application)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### How to use IPFS in your application\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5619","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-U+exqlhUwoO+FK9+lZZoPbJD9mj6s35D2huOfNaXocX6cDgTKjJ3gADDYigLmW4T9oh0iGiDxPm+pt4dPVBw9w==","shasum":"9c13104592ff747ee3f3b26cec45dfabc4a61eaa","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5619.tgz","fileCount":338,"unpackedSize":23585586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegiDhCRA9TVsSAnZWagAAOMIP/3D5qs4QXQNCVr+Q/Yd+\nwDnuImwTO3b7vf4AtDHcNuyK/Mc57Vh5mvnR6uqsBpU85gl4JBDnZI5a+BF5\n3JKVqe25LQXvyuq2IHASDDLKsUVsTmNgyoerUdNA58p1csbuugpAX3maYbH6\nvWKQKit7s4rIGhAfQlUf/36mwdu8CuaVWRME8jwbSlTixIVyobiH3HXzpUqd\n+0o+988asGfgVWFzwT5RJSB5F8DJKXaMGjKMjxDUlPv1qSUqUhDWGhqMuFPk\nNfpDJu1rHl2cWJ40h7ri/h5GiITiFZkt1Szvv1x2zhwxlHeOC7ueq8rzznVN\np38lbU1vAnkBjauRL+6E9adsh6qud3jcgJzJcVcH61mqstekOM4bcajqHG9R\nh0lXsdDHQaVanRAs5kFmfbbcKHpKb4W9kObsY85lauVXFH1LJzj+bPpZIwFT\nepBnkA9us5jgKUuxXMTMAqhKo7UQL1NloEjipNeQ541SIvgvxQhFIq0DyhI8\nXSN99DN0snG434qnvRNH2ktP3dR1hYLw9SicVZkM+mZskA9iDiDeLbvZSYcm\no9YCM/fJM0cVWTxJpDlePJknumKtTJfsHrhtaWnRC6Grl+yzBSTeqjz2tCbY\nxfbxdeYEhS1cqTg3RY93PvF+0zrJPlBZIfX1R0wsSWalkXaREs3wsqvX9K9Z\ntpwp\r\n=z8JF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1m2xz2dL8zk10UIeCIMgoPQ4vqouNOzj6svtiYVIdaQIgHgib6ghdHQNsUZ5HqigazQzyrnlqkmzSbLyfSYQU0VY="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5619_1585586400662_0.493113280256269"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.41.3-rc.5621":{"name":"ipfs","version":"0.41.3-rc.5621","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.0","ipfs-http-client":"^42.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^1.0.3","ipfs-unixfs-importer":"^1.0.3","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.132.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"c70f496cb6faa6a4a3bc90feb6f792a8ff66cd61","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [How to use IPFS in your application](#how-to-use-ipfs-in-your-application)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### How to use IPFS in your application\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.41.3-rc.5621","_nodeVersion":"10.19.0","_npmVersion":"lerna/3.20.2/node@v10.19.0+x64 (linux)","dist":{"integrity":"sha512-1YXFiLHtm+9VrS0OZOlR3UHR6GTFIsqsUiiLmkusdfhUImzOvwFz2NSxfXdFqqS/ulR1YpWVAlTTs7lLQIHoXw==","shasum":"5b98dc771af922c6bd729adbc76d60ca3c51aa7b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.41.3-rc.5621.tgz","fileCount":338,"unpackedSize":23585535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegikBCRA9TVsSAnZWagAA7wwP/2CAEtHq4G0B+xEZ7HVw\nBnYbOKGkZUf8AbQ/xIn5eV+e8mRWAub62c751j0a8hF9nIABz1HNsmPojeW6\nnYdEHucwxpnOLdqczaHopiN2xs0VyK3mh0MHGZfoC3WrNFdvLH2HJ3ZLC/QQ\nhrfkEXIJBmWrbyswvOxukavd5FWI/sOsfSEkTxCFsa9WuQiXG1/ygd1B26GO\nBliNwUKbyXaHOTjS4bPDSfVSJXWmylEqxol9idgPiPAo+18OYTulXn6Wzg86\nb/0uU7LoDQQqdAHbdGXRTyIewP5A5saTnUwBoguLcmTZdE5si98NpmYYVBTM\n0OgqzGaCNWAUc/FbGilYcoMXqpgJLp0d7ChFLtq6jpID4Tn/W4YXHag00okm\nwdVeCwmmYCP1uZvf0m+3AMQGcW+wE1oWW6t7uBFisl4jF9x/13WqtLZcL/uj\nyHpw3rVM2P27rSaAIZKVTF0qnfM1B8a2TyFRt8XoYoCtW5Tl6DFcbRc9n1n1\nBtkGsY/ogSftdgpoT/08L4Bx1LortUopOeXnE52wQXN/C6DgPdScUzSZFn/U\n3Tlf5S5Mbcd4Wwn0p/oaDPM7BrDk78EYWcH5iCKHrlj9laez5do+M0+BEkR4\n0CNk/Wjkl3RhF317pWQZgwGjeIS3m3th05aZn16Zdhgl5bfwebo7DQwK7RL2\n5nYM\r\n=OhIq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDediZdn7khpzpzfqB1RnvNvvGt1+CFfTtyZr/l1J3pDwIgd0vkSdpChRR67M+gOsaIrIpUjHsBDJg2w3B3eeF1oYM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.41.3-rc.5621_1585588480124_0.462569695700773"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.42.0":{"name":"ipfs","version":"0.42.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^0.7.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.0.1","ipfs-http-client":"^43.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^1.0.3","ipfs-unixfs-importer":"^1.0.3","ipfs-utils":"^1.0.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^0.6.1","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.133.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"7f2872bc6fbacc603af38d860f098defefcfd1eb","_id":"ipfs@0.42.0","_nodeVersion":"12.16.1","_npmVersion":"6.14.1","dist":{"integrity":"sha512-Ra/TQ9UXEFQemxWZXG7lhfHUrlAMUQfsCbkKH9w9PaqUOUzHenuPX1oT5LHyaUZLXv4LQldBXGms2w/fZ3x+wQ==","shasum":"e6faff63bd9589940c777e63c17f1573d09ed50a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.42.0.tgz","fileCount":343,"unpackedSize":23666302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegxB1CRA9TVsSAnZWagAAbW8QAIcUngzeSzEMJ2W017Vl\nfbFl4cGnN5BTkGcoV0hOUI9nDpLcJxM51WwW+2PteMUGqwnbzNjhG7RbZQ0b\nlLkkvve+zCP8zN4TQ8DjKxPnoGUy++HjSQpQgB7LQeCbQy/h9Al0rLuRFXzZ\nzSSfAPyeIx7x8PKgptG12u2XjPfI44GcP7odv7UBRDx1oiz52LywEoBDLIyg\nrUfEvpjO96P4JsadWgjsIcb0M5Ni1egNCiUrOsRrPm4WDeVfJMY1wRk+HaBm\naXso29wN5iuxesai5WBD9EzeSYFVAF6cgvlCZkQB6hAsLPnMgLpIb64B997S\nWW2yHPrQ/gYmItiLfvRpn4iMgGFD/KJO5H2h+r+S42fvLwRcZYjY3c7aw3oC\nYYq42GjRWUQ+9BeVHMQnDs2N5UuE46ImmmZrGeHtm1Z5B/2mw/wDQt/6zAHe\nZuWPIGeBf4lBtzq+Wf/6yoG0f+NblazztJThGzjwRcSSQZWP3BuBSiOjKvy4\nixhEuXydMiz9SibJAD8u+bCXs0cZvlIdDZ3dc0zlvljuw496NCG+aJAslMX/\nckind/97q1hXXftFGzhqItMz937eCxL12Lrac9cRM1FKNc87CR9zemhkm/nn\nQ8gAgFtw1kPqWHgwSwWJtntzvcHUsHLg4PVzSmDCDULG9dMSRfcZuFBbfri7\nDjnI\r\n=Wc+S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSCdZnsd5TQWs+I70Ec4M3L25oCV5OsLuVxuqDERXrkAIhANwgISj/KLpkauKOZWLhYoFLVteSOaPNmS3PpXOvS7TG"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.42.0_1585647732237_0.44631369547898836"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.42.1":{"name":"ipfs","version":"0.42.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.1.1","ipfs-http-client":"^43.0.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^1.0.3","ipfs-unixfs-importer":"^1.0.3","ipfs-utils":"^1.2.4","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.3","libp2p-delegated-peer-routing":"^0.4.1","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.133.1","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"d05793ac5a823d5b83056198e4eb34e3d75489d5","_id":"ipfs@0.42.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-gi1e4AiNAuLcigtkk2KZRLrAqgPgqXfnh6+HMHDC9GAHOp84LgWYUsevBES+191CnFkcEWudPtcoBYdC8G4FYg==","shasum":"8f29b97c40a8dd5f29b09bbfd79e5dcad8908564","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.42.1.tgz","fileCount":338,"unpackedSize":23663450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejgaNCRA9TVsSAnZWagAA9FwP+wQXR4IEGdIrKlYQLtNK\niJNqw5sS8ZtWlz4oWL5JxcEPW8xen3Mkk4TE20BIh2Jwsxp0z6EYKEh9UlSy\nYh0PIfwIUte67zubYWGfep+iS6EIxkfj3ukufqsq1tew7yaZSR2z/TJoyuVg\nFT3St2bLuY0j5zmTbFBgx2aCYsYYDlaLPyOwQ8Z49W/JK9GtsqmDJSmDX4Ox\nDYGyOOBkWlR/+VrwniXF9MT4cRddEuSrPO2twhCZ0M0RDRx4AIt6xcyFebXV\nts+h7SVM5QVpoYtAqRHMUd7mZFhwcaVTXi3Nr35gQ1fN7lS+fjUSNZFP97NQ\nC0QzFM5lWiIxvQy/gQOv9m0bY1HlAUn3YtSOO7eOrn857NXm+oz8L6kT4+dq\n/FSZrAw4QKydc7rT2wGImtGjLkJi0QeyVuWRqBr82j1oFMn+k254rkSgW/TV\ngk9ZpO4pcMlZxK1TN43HlsAceoar1jtHY0Nz8cYobm6VCxYd0hEZuZwpyWKA\n9YnvyyNrl3dqPIoCfTTvCM6tsvSAlLe2z6TPs5G0WCCHVSUXZks7hLKoK7PA\nZKmlMDeEoI38htbFdtI/ZCphiIi1WrX90DgSITkkdzMuo1arQidPkb0wKBnV\nDAEHdKudH5Cd12MxHqxcpF856phUE+U+qJs80bKY+01iG86JdcOZtKn38Uiz\nR10v\r\n=0PQE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEDYPhql+VuK6bgcDr2HJZGJnRLzz8hPdAWZow+PrPk0AiAgi/OiH5lzviUlI+NenJJ3A/7kB+S7+AwvrlSPO1jwpA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.42.1_1586366093001_0.8506824396126951"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.42.2-rc.4":{"name":"ipfs","version":"0.42.2-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.1.2-rc.4+943d4a8c","ipfs-http-client":"^43.0.2-rc.4+943d4a8c","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^1.0.3","ipfs-unixfs-importer":"^1.0.3","ipfs-utils":"github:ipfs/js-ipfs-utils#fix/add-iterator-method-to-response","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.133.2-rc.4+943d4a8c","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"943d4a8cf2d4c4ff5ecd4814c59cb0aae0cfa1fd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.42.2-rc.4","_nodeVersion":"10.20.0","_npmVersion":"lerna/3.20.2/node@v10.20.0+x64 (linux)","dist":{"integrity":"sha512-uoQl+iOLX9CuednHhl0IwWk273K6OED52hNHHBC9AvHZ7GDQugGi5Yx0YCAvu+lVNG1i+hTYL7+nU48JP4Ikxg==","shasum":"313c21262efb69f8d04ed44914f30c7856140943","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.42.2-rc.4.tgz","fileCount":338,"unpackedSize":23650578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekKUJCRA9TVsSAnZWagAA9FQP+gKoSFDbEORXPp0I9npt\n74hF1rSb7bKM5v6YslHyb9RV4XehHpBGuEmgfktoWv9O1vKFrw4Vg9sG07fx\nd85gjKSgU8C0tQqKdY+P24oMtS2mXpTiZsrrEUnx4hLPrWM0wy54sST1K/YF\nJtygFwskUGjiDiMAC5tR8J8idCiuUt6DffmH3/KBwCdtWrFKX0PonFHD3s73\nMJQ/wdGPcB3HjoO8tHP9qIosvmbZ7AtYK0kfmVG1oesFWU3c5oTbGRf61jTe\npEmX/cls3em/agY+6D03RPksa9Tf3SGtsdA245svhFqr/+opj/xX61AltmAC\nT63eO8FvfIYYxy393RCW9HLMfi/bV+/UyPymht4l5jgW7KAXlM3XGQTpM1up\ndSgsA8OBdxa4XnESbmL0SVXfx/2PBQYrLmrt+Cwn+aKiHCbwVjHtgxjyiIju\ndOh+XmLVbfp3lNxhyiQvsvEtf3eefm4rf2e+lgNUBv9jjNMYxO+n5hkDUUwN\n7pzdBCtlD8hKL2yjA0ANauNskmd1Qyxuw8lsOKW0UO0NZOlZvhZ2svEP3yIH\nKy/UFIypuc9zt/qgXzW0wqM2+wUkMfM2bI48ID36Seauy+6eMcj6f0IpN3yW\nD8tIeseak3mqLadOpgVSwGlFkwmqbQRihIQmPtglkDr4pYyy39FWfDNUTvNB\nw1pS\r\n=+sMC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERHf/SLa4IYOYw/hu3fQzBgmJHT5DsmZTqEAYvsDJEXAiBJCaEt7Qshtr7QI6qGwDMQTIRuSIfhlhbBM2+t9+YVAg=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.42.2-rc.4_1586537736319_0.18785979229007155"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.42.2-rc.5":{"name":"ipfs","version":"0.42.2-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.1.2-rc.5+6d98c924","ipfs-http-client":"^43.0.2-rc.5+6d98c924","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^1.0.3","ipfs-unixfs-importer":"^1.0.3","ipfs-utils":"^2.2.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.133.2-rc.5+6d98c924","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"6d98c9248e35514ba29bca5bd92df7fece950030","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.42.2-rc.5","_nodeVersion":"10.20.1","_npmVersion":"lerna/3.20.2/node@v10.20.1+x64 (linux)","dist":{"integrity":"sha512-01wa169M54kDcUhAN8xqtWTaDHhmFaYEAmL6P2mAqDGO9CELbZeu/z86L3XluTEa1RW0rwzbx9UUxnzX4CDK7w==","shasum":"ab2bef9a7447f70bdcb001772dc1e75bda4be714","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.42.2-rc.5.tgz","fileCount":338,"unpackedSize":23650515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelgnTCRA9TVsSAnZWagAA+fkP/RepmPSP+1A7ISYNX7IL\n22CRUckSD1p75RLRuMGoyt2pzeo+8X9fNZjXjluvy1Uy7JtC68d7hQhfGYaV\nhD938Gp71F1Pct465td1DWsw1i/EEDm1f3oFu5J0GeI1HAZM8yU072g+sytv\noiXqmrmc7r3OK3NI21c2mo1O5gGLB45QarquBGGA57//9Pl5R+fvrV1tBk03\nX9LHsRrZg2PwwW+tBy3XGMldWh9Th2a8/7yF9MPtaelAGoSFl3YBZErnmy01\nAEN+qopxEWWRZ/kAlLwH+tCAPyIxrT6xOE8tvqrGAEEl2B+4Qp6q3epaJR6W\nK6nr/vgl0XVivWjtjQSAtmRRB0UKmI6KrwNuGVSClLMJYYV7vI4dzqRxwqsw\ngW0P7L9ci6o9uFJeaYpBNrI29Qgw2Y8hDFWhQOt7wZAJiHZSARfuI7tRHRUm\nOJTFNv2OpJeiZ5zlGDwANnBoOpxaWA9riDEg+XY2wYeqdgAD8u1x6S/wrZn3\nL8vokPcqdeoHSeqO8cgAvig1klZYUSyy+IbWn5Uqm6JTEH0FRgGNKy7YTel8\nB1l3z8JFq7cv8SiWau42S4sgjC4/rLkaUd5sHC1ff4CKpE6qqxnkEM/+Z6WR\n5KdrhsmM21zsp+1HDGE8pWTBzg8A4hqSgvDWl2YoorNCUBUgdaV8ul4g3Sok\nzCOI\r\n=5lsl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1RZQiX/THUOYZkpLqDM3K9Jwg1BN2tDKwzy3YycSELQIgCdH1CuXgyVVEc0XqxMXapZeYQrP82wLhV25FAK2JZyk="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.42.2-rc.5_1586891218696_0.0437120462553251"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.0":{"name":"ipfs","version":"0.43.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:browser:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/interface.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:node:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -t node -f test/core/interface.spec.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.0","ipfs-http-client":"^44.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^1.0.3","ipfs-unixfs-importer":"^1.0.3","ipfs-utils":"^2.2.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.6","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.0","ipfs-interop":"github:ipfs/interop#fix/name-pubsub","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"dc1693acadf8a550bee2a5ac69c21180d3a9bfb7","_id":"ipfs@0.43.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-LJd+dcTu2ZPSZEpBcpCbjArhHsP6qRU58m0qyfLKmgCWUGTD6LzqzKlQ0P+l2YMpJLzYsuUMkjnZUZAvSAKvcQ==","shasum":"c73628587783800f6c98ffe3f151c5ad4a9e8987","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.0.tgz","fileCount":338,"unpackedSize":23694498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemFogCRA9TVsSAnZWagAAHTgP/1or4tHL11FcOBobzCTJ\nZfwXRX/xTYAOPX9Bw06hUK55fCmApfp3FAUAAZ3KE1aUj5KQ7N7fAjTKW7m6\noJyVopPdfUhYujwz3sP0Kw+ZUNjYgq4wBMdANH6is2DwmQYVZk5K+9shHFYD\nck6l906W4Vi1i+odc2lfCraL0XBbOJXfs5PPYwwEBu4TKXFHn4AmTDWUBt2h\nytZkOcH7AO5dk8/1nEWffTy6cHGFXmZ9hTm5wYK5fWDY0ngQ+vDcc6r5X/Hn\npF5mOxn4FHHwm9o95Bt3z9n9ehiqhqyZHLFVsmjZe9SBt+Q+lvN3puBJF5er\n/996DJV2NdKTyWwVXmpsQ2SvpmzMbl6yFicHzC0Wwb0IbXpC7ezsSxmpE3sp\nZUpBp2uADFfgp49/Zawlt0WmlFoNksky6gcEnJ/NV/w/lnPIoyszIseoph+y\nwJzxw6Hf5KpAVfCJbiM50kjNriTAigEP3NlUT6Dbe+7R/Elt8y3P5KtsNgeK\nGPWCsxbLcOUf8Wn/8NFw4xlcJG7sbjPTEQDL4etoKCvWdk8MmMetcFIdNn5l\nFrz6VB7fk889HLcbGVa3PESk8QoaUBKAEe9BiE1etBAk1R4QhjqedJyeiVGL\nJK4HoRsk7z2dkHwZGwbrWnMt0UjmKeqb60+PCAKfViGccvl+j9VUeKCxf7jt\n54v6\r\n=4AHa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCD/Cd1PBhtPeRM41SkPWWDTAgBGLOjQ9C9afPGmM8ZNwIhAOArrZcX/1iOEKZtaKejuQ9P4lDAOiJd4Yoo3bDV/qir"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.0_1587042847529_0.06196716618578946"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.1-rc.13":{"name":"ipfs","version":"0.43.1-rc.13","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -f test/core/interface.spec.js","test:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -f test/http-api/interface.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.0","ipfs-http-client":"^44.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^2.0.0","ipfs-unixfs-importer":"^2.0.0","ipfs-utils":"^2.2.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.9","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.0","ipfs-interop":"^1.0.1","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"2e0a1144d9405f1a34fcd038361ad075968d841f","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Tech Lead <!-- omit in toc -->\n\n[David Dias](https://github.com/daviddias)\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.43.1-rc.13","_nodeVersion":"10.20.1","_npmVersion":"lerna/3.20.2/node@v10.20.1+x64 (linux)","dist":{"integrity":"sha512-//CbfkaYX2Tyy/02hV2dqrnH39t4VYzJ53+TbLqPNhuyykFjdpN5bME86bLfzYKXjoRu7j1onoCIGn+kRCOenQ==","shasum":"e732573a857503bec3fb0e0b035f917a10ab12c8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.1-rc.13.tgz","fileCount":338,"unpackedSize":22946697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqBrmCRA9TVsSAnZWagAAdd8P/18EhNZhgPrF/NTaU0Ob\ntU5iL+QyRdP80HDhdpPtXzbRSSvYcIl3GS2wtF1pqp2CAkLkWpN+dTtvQ2Fr\neoY0dKpivFV3M2qvN23vN9e5dzcOA+0BxYFTmcN243OmoTWYUSKY2dNodeYK\nzjpZdWCEf3I8wYmH/kZVGJxqpXR72S9fBb3bgDL22vm7e3XMEKNzYKbrpDmq\n2RvHlcr8aTbqFa7k29TWUx5k66iUMbPpHRDIqq0FF03GjorANiRurCutcVto\nsQRY0qNkyDOPXlyr+yQYKf733o7xnHcBu3bvXfeRh644gtj3aqWaHyAHMAct\nad7HZojY/AAwdNjcN1w8YTlmasmsRWqDF0qpvY5i9S0kRHqOKi8zLSne+sQq\nkkx287tJU1Rf305U9vYD6XS79ADd0vagIb53hOO0LL/LBz9gxvEdVolKvSdU\n+F6Zp7cm1KZWMMd0AvLEFAcinzDReU9T0A6tSPj30Dvg1/notQ5sUIilZ4Vd\njmF6iWgHnPsE7xYVvc8sz2hBLoS6bpEpkRc2UAzBRX+x+bmM7wFlmSt2sLvo\nlSBmpF972EWSnGqmypLus2znXQk3zkkTVqfV8Gi3uKp7x5nT4IVmqO0wLDf1\nASvbXiITJhdO1i9xK6Vh4DDqtmjAJlYUvtYFc3zKz69938pqO6wmBQHKBmeh\nXPTx\r\n=BIL+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAwe7JUQFli5/wy/SE9H+fMXASJJujnd1vaHoFyxGpmDAiEA5PN0uZZ5LoqbtLr985oawtPYH9AIaZEM+cqtL7bwJq4="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.1-rc.13_1588075237401_0.03573902154190689"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.1":{"name":"ipfs","version":"0.43.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -f test/core/interface.spec.js","test:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -f test/http-api/interface.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.0","ipfs-http-client":"^44.0.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^2.0.0","ipfs-unixfs-importer":"^2.0.0","ipfs-utils":"^2.2.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.9","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.1","ipfs-interop":"^1.0.1","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"c16b5b4563a38438f656d53f0c57584508dea39d","_id":"ipfs@0.43.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-N2/TxcRUPJ9kpxn2gnt5fCd8ZiuEYY2T5Mgoclgksnh4NzMY/Vd8OLliGO3wjGqH08FPYfkZOOu0KAc67Kdgpw==","shasum":"0fbe60c8851f0b9906fc90240bdcdc14d073d175","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.1.tgz","fileCount":336,"unpackedSize":8171491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqCcACRA9TVsSAnZWagAAr5cP/0pC021JbOqm7v3zVIsZ\nqqmRfRknSiDX/HGmNtSZUoOeIT71J69+ZIy4BQhgR/ShId80bCz16o6XjyfE\nswKxGkj1dqmjJyBUhagO9x+LidYsn8X8ikQPxxrk1le57cnueSqC8eVKWCeX\nXB0TXShJptfnVCUyRWMNmZY/IFmJNXhGkDlybuwW17nhGBmmjb8K8izvJKAI\nFYHtutPjVYjbSySAYhzr1IFuB+dl6JmLfnGEvvj/woOAQ1aLTu30nwaOBP1h\nP1mxHzuL6G1MsF/6ZpKaVeHUttyl2kWcLeP1SV1enDpGW+QYpZ7DAuy3VE0e\nzXNfjqggbACoNxGlEfqHTU6rGHZVjzEri3K8jm2MGrivAPoeIJbsbyhUFRyd\nRhMOTPQu+QsCuXqRGC1ovUXAQvGIcL52pO2V6DIhZ1X+mVqWX6oNJA5LX4ET\nGv0QDcGknpKg0+UVdon8NCZ2JpdTMOSbO3t74LB07UJscMovAvUuRRiJ7MXh\nwnOzyKoMY9GspxP+KyvuKF2KHvMEony0480G5sZ/A3TDgpeLm/U3gbslN8We\nTTyrygBe3zx346GEHe87Dfl85z2X5UUHXAUukFX+O7dBKz0Ju3d7Dupb9DJF\n0qiiE3tYT0F2ESVdpqsoy7UMB5ZIijvLMNcsQKzMYs2XbR6ndGSECNeeHDsC\nQ/mr\r\n=AXbB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICA3/vAP41+8GpAE1gRcxJlJs9ZEDxUKLMkV0CvE6eiyAiEAj12j1lUnSwr8Wcq2d52ri3WwlNC7FYOEMZGd5HkX9B8="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.1_1588078336175_0.633189315101907"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.2-rc.1":{"name":"ipfs","version":"0.43.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -f test/core/interface.spec.js","test:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -f test/http-api/interface.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"^0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.0","ipfs-http-client":"^44.0.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^2.0.0","ipfs-unixfs-importer":"^2.0.0","ipfs-utils":"^2.2.0","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.9","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"21.4.5","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.1","ipfs-interop":"^1.0.1","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"0a05d4e69ed7f00de8b940714d20c329f2eee41e","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.43.2-rc.1","_nodeVersion":"10.20.1","_npmVersion":"lerna/3.20.2/node@v10.20.1+x64 (linux)","dist":{"integrity":"sha512-yuhekTM/tXEZmHqh8pN3GqMSm1ER7s7IKrHnIbLKp2HzauGmWSqDeuIN3QBcRr21RIGfZOwIGbd9HDwgZE2Z2A==","shasum":"fe1c089d65159744b890553eb49263cbe8667ab1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.2-rc.1.tgz","fileCount":338,"unpackedSize":22954000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqxxaCRA9TVsSAnZWagAATPkP/3IyMKTFT8D5SmVqSbi0\nOEtJjYZscDGtDu+HC4qrJl8FvfvKR544PL6sYJNcUWwHulW6TAMSgXG/2QOU\nG8Gxm7n7VeXYzD79lmyiLZ+ydHWnxlj8z9r1Svw1OyDp5JuI+xvzVITv1LpP\nFhj+MJkyKgSzBqRi/fBvEMJjB4T2MhHsU5XvgTvvyeYHkiJ2wpM6OjxqrS3O\npqGPYsZsgV8F7lgG9SAPGNloa24Ce+YvWwg1fYCdXkpG6jq05jNuhDx0EFYW\ncOlhOlxgYbkxM7HkUqMr8pwFaR1/aGv44eKY5a2urEl1wRlsNhODTykWr0yd\nhkQH9fZJDdUCEHRp3CVTMD7FLYOCAzRvRT04bnUn1F7haa10Z8WBe3i6OrA1\neqOC1rNHSKbfO+7UWWQFau31b/MRb2Iu22oBTEWUu4QSaAhiy5HkEO23Eygh\nW7grqe1t3b7ZZYAwZQyzZ4X+N9k4cV0umFqNfmSWiUUz2VoPfTy5QUw7Xi0t\nc6NvlAx17CGBXWXBE71j0h1yfoc4IzrNQCna3IkUMR0yKTPqAnBdyVzyERxo\nyEIuvclU1smSEU5WNlPwMMK8COqnGKjM8yKDbg87BfWUa/W3Vu3CRy+Kg9jJ\n9njt3FgKN70IzU0TFCwKaSC0vla8KjluGZ/2dMCxTWV3uR5YYm1liPB5y8cU\nZSVG\r\n=eEMZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCiSWHeyPzN40Dggzp3Bmkde70FKZ4K2dTanJnVtdPlAIgXuB0g5QeTibJ28jn2X8Q1ADdJTXtuspz79sGPyX8qWA="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfsbot","email":"infra-accounts@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.2-rc.1_1588272217375_0.09642176549480963"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.2":{"name":"ipfs","version":"0.43.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -f test/core/interface.spec.js","test:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -f test/http-api/interface.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.1","ipfs-http-client":"^44.0.2","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^2.0.0","ipfs-unixfs-importer":"^2.0.0","ipfs-utils":"^2.2.2","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.9","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.10.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.2","ipfs-interop":"^1.0.1","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"e4620af7d3ae1180e94f272ca9f9dc546d17f986","_id":"ipfs@0.43.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-iSPFHFqgcteMB4h9rsM26N5ufSQIfKovxXtkGXH1tiE5/ZxDe3JGi7NDXTbeqKLEIKLYkOXa02u/t3qs238aCQ==","shasum":"338052eaa9a536a31a966f4acfa057a360d70b7b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.2.tgz","fileCount":339,"unpackedSize":28458479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesY3ECRA9TVsSAnZWagAA5x8QAJbusmn/JtibV0draZmG\n8/fg1bUD/xKBbYpe+ABs1BQntSf2Oy0bjoV1iWDhe8vDZvaL3OJOlNtzeetA\n4PEoR/X8tNJbGlBGvg0amUkCvo/2LaQQO45QxV9xk5qxAY3GC4xHHZg0/4VN\nC0Hq+gije+dDzjDD1q3Rb72fvFujZVmu48/lo/RH4BQf9u8QV+4i/up5SOGF\naI8rzWlzMbqBLlXrYQzYJHWhg4r6AwL9K7/BuEp4nsW+73R8C/CFRUbA/AOm\npwrow5yhj2KN8GhEKTPa7u/4xyHk4VqN1amSitOOc70TBUJz63Mh1yBstvk1\ntSRIBS82jgn66Fi+y27EmBWkfotkwQ/f1Et1QJ454XIqqsl7+gRnd0Y/BILG\nqqQOIP92phVTiJJm4ff9GId7PZwV02rBtc7lPZQdkuj2o4HQWbOp2X/rnWSI\n8PUWV+nvQMgsFJD9rXxCnnPjtQFpIxOLldQCgkBZ9Mqg+RW60rY+ftyZXCxL\n6pmaON7cVPCOtdyrOniuIkJK0pOvu16XYf7fEHzlpcrIZd9F7EfzIYXEUxR6\nqSP5HzhKfhzNUe9YgjdpngxJhjUFV7uOrQBFnlfebM/+rR22wuPSe5WQ/4uu\nZkMql5DPg81QS8tasc0wOwZS38nCDtTPyl/WuCuyo/GjOS7+lGIUL/gP4K8K\nkPhQ\r\n=n1vC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsYXUiQWbt+XnTQJWa+WpOpKyc5wjK0tHjqMJz2z2dfAiEAqcdRxqypd/+2BLan0CRmOhoV73LyfFFFTb1QUy4lbgE="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.2_1588694467759_0.873407332662387"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.3":{"name":"ipfs","version":"0.43.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","stream":"readable-stream","ipfs-utils/src/files/glob-source":false},"browser-all-ipld-formats":{"./src/core/runtime/ipld-browser.js":"./src/core/runtime/ipld-browser-all.js"},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"cross-env ECHO_SERVER_PORT=37480 aegir test","test:node":"cross-env ECHO_SERVER_PORT=37481 aegir test -t node","test:browser":"cross-env ECHO_SERVER_PORT=37482 aegir test -t browser","test:browser:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t browser -f test/http-api/index.js","test:webworker":"cross-env ECHO_SERVER_PORT=37483 aegir test -t webworker","test:electron":"cross-env ECHO_SERVER_PORT=37484 aegir test -t electron-main  -t electron-renderer","test:electron-main":"cross-env ECHO_SERVER_PORT=37485 aegir test -t electron-main","test:electron-renderer":"cross-env ECHO_SERVER_PORT=37486 aegir test -t electron-renderer","test:cli":"cross-env ECHO_SERVER_PORT=37487 aegir test -t node -f test/cli/index.js","test:node:core":"cross-env ECHO_SERVER_PORT=37488 aegir test -t node -f test/core/**/*.js","test:node:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -t node -f test/http-api/index.js","test:node:gateway":"cross-env ECHO_SERVER_PORT=37490 aegir test -t node -f test/gateway/index.js","test:interface":"cross-env ECHO_SERVER_PORT=37491 aegir test -f test/core/interface.spec.js","test:interface:http":"cross-env ECHO_SERVER_PORT=37489 aegir test -f test/http-api/interface.js","test:bootstrapers":"cross-env ECHO_SERVER_PORT=37492 IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.0","bs58":"^4.0.1","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.2","datastore-core":"^1.0.0","datastore-level":"^0.14.1","datastore-pubsub":"^0.3.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.0","ipfs-bitswap":"0.27.1","ipfs-block":"^0.8.1","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.2","ipfs-http-client":"^44.0.3","ipfs-http-response":"^0.5.0","ipfs-repo":"^1.0.1","ipfs-unixfs":"^1.0.1","ipfs-unixfs-exporter":"^2.0.0","ipfs-unixfs-importer":"^2.0.0","ipfs-utils":"^2.2.2","ipld":"^0.25.0","ipld-bitcoin":"^0.3.0","ipld-dag-cbor":"^0.15.1","ipld-dag-pb":"^0.18.3","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.0","is-domain-name":"^1.0.1","is-ipfs":"^1.0.0","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.1","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.2","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.1","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.2.3","libp2p-kad-dht":"^0.18.3","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.0","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.3","libp2p-webrtc-star":"^0.17.9","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.2.1","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.14","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.5","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.0.1","semver":"^7.1.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^21.10.1","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.3","ipfs-interop":"^1.0.1","ipfsd-ctl":"^3.0.0","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.5.2","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"34611213384585ed3ff62fde05d25607ea89cf1e","_id":"ipfs@0.43.3","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-uNd9KReDFRHJ73tCR77y+AkiknroMBZA/LoN+wZ26Z8m7NRyEhXRxVIoeIB2EfIdOdYuwfkz2HB8ihWki0COVA==","shasum":"d3ba49f9f79d2b73a2ff2e0a3842d0270034a2b3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.3.tgz","fileCount":337,"unpackedSize":9861808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesbL5CRA9TVsSAnZWagAAs8YP+wehy/JGzFd3nC7GxUzL\nSpkRveD7zVvsZjTcUTNW+sBzfROTjtfRas+A0QLm2Vm9EGf6vyFMInn2nDKM\naGO72Ijm6qS/6uIeqyIbEe436qD1wqHlmvEdj5YxW0kg1NQ0WlEo5p75wX17\nNAyCPnP4O8xs3a6+6D9zQNteNnhZ27VZmgCOQ1bkIfz6tQFB4h3vWwoK7h6b\n4aQVFKfajtCsC95S2b6XeF9QXBuXt+MSe5vk2DvPXBveJvPMhoJuPeRzxVJm\nZnQqwLgxo/uT3GNcNlsCz7VFfSdzXaKLnJXOzqUfM3LJfMu8FNGWNjHyWRIw\nX2x0MJst6zotoS8gRQMr/0FQVS1Onf2XxTPXLIxQXO4w157o9lxFRk/O5XYI\nW8zrkVtBe6grWQlUwPRwL0WCnXgGSR/ejGaoFieMJ/iMINt+4g6PErbgrZnt\n7eo3AOFUuaaK8B3yJ00zQ0vPxeQKecFjhgyHiJGHbYdspuyJ2Rcg64pMyDDr\nC0GPOid3z8yAgGraT+pz9UlE4LPHejfbjVd6wML3mp0rSUm07OFJTIe73y2t\nY1sPpWGwz4YhxLzu1p10DzjIH6X8nKtg6HUcGPTXXWUFlxQZnoXe84uFHVpu\nh2tn9GR37JSiOYkIVxzl2WuWl8VyHqV5arOKGQLl87Hwn/vHwxU9KTJoHzMG\nh51z\r\n=gPqs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd3lhsvGf9oZbidfL1BB1fppHKlvQv1sB8tz/pXKhmQwIgAhbwKrRtMGbifSIcmc+38A2P4ktlsrXevi6nrC1Bt9w="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.3_1588703993218_0.9140312306267364"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.43.4-rc.3":{"name":"ipfs","version":"0.43.4-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.0.0","datastore-level":"^1.0.0","datastore-pubsub":"^0.3.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.3","ipfs-bitswap":"^0.27.2","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.3-rc.3+2b24f590","ipfs-http-client":"^44.0.4-rc.3+2b24f590","ipfs-http-response":"^0.5.0","ipfs-repo":"^2.0.1","ipfs-unixfs":"^1.0.2","ipfs-unixfs-exporter":"^2.0.1","ipfs-unixfs-importer":"^2.0.1","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.3.0","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.134.4-rc.3+2b24f590","ipfs-interop":"^1.0.3","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"2b24f590041a0df9da87b75ae2344232fe22fe3a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.43.4-rc.3","_nodeVersion":"10.20.1","_npmVersion":"lerna/3.21.0/node@v10.20.1+x64 (linux)","dist":{"integrity":"sha512-VAk7ni9V1MCwLHc0GUHxusOeKqpMKnvku2s1Vm1UzFw1IVsaDkB1cpVF9BKevQ0g6xlJxkRuXfWZa+/1BJVD6g==","shasum":"c211f18e53ee7922d0c3f0bda6ba3a250975a60f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.43.4-rc.3.tgz","fileCount":336,"unpackedSize":2311928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevTa5CRA9TVsSAnZWagAAFDUP+weX6v67NC9Z7l6R4c51\naY3X0n3nnXralxCRfR7c+DUYWgkm0gBC+5MfDVKCqHESt25TG/HiMfYli60b\nO6QL6epqaIloTzvT/X+sXoml0M1KdEa4eQUgSMTbveH6MSjw0gKUDcUvefJx\n3fcMRYKzA35+4MX6QxLByl1qotatCEiLDnrp5YzIl0QA6N2Q4401pQ23iP4F\n+0Q89wOiw61r1BcUQKRMLvRyN10FZ8gXxsv9xkvTueF/tluW7Zz6vpMJvErK\nzzedX8SJKiw6cGQpx4038KyDGZ+/sAXgXi7O8e7AdkYUSOlgLluu1TTBE71O\nu/I5qfjRFT5BZaCJOt2Uji//UbjYVYkmoYgNvn8i2rsJqMYoAZGzksG18a0c\nWakCAj5viq1iKifyjwXBcR5IsLmLNNCbxs8/nZcarGT/KoS3RQ6m1gC+zOgh\nIdwDY6WSEYVvchyJteTUuEWXr4FQzT9atfPVY0GdPKJeef65pd4dKvakALyX\nscMDLjSFhg97WWaRK9TL9m969MDMVZf1d5QH2cJV8a9scdF3BF/Yir0UdVCp\nGJSoP0cYp8qUfwNZaove021gSDkQM9apa0Fk0ArHpY6x+Rs65kCHMKJHZXqL\nXDp5CwGbP0cnZHRSDpAKy7x0/Ac6YUYBh2WFhAYGXqmaQRRRMcDF1oMaxq0G\nWyW7\r\n=GSji\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyp/FC9a8XEFI6w076pUNXsSyLZVhAbPB9q0W/EjvasQIgTaXPp37vbAb3FLE4TR2Vl3GrY0muQbf5br/hWDfXrXo="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.43.4-rc.3_1589458616583_0.39302009684196704"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.44.0":{"name":"ipfs","version":"0.44.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.0.0","datastore-level":"^1.0.0","datastore-pubsub":"^0.3.1","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^0.8.3","ipfs-bitswap":"^0.27.2","ipfs-block-service":"^0.16.0","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.1.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^2.0.1","ipfs-unixfs":"^1.0.2","ipfs-unixfs-exporter":"^2.0.1","ipfs-unixfs-importer":"^2.0.1","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.3.0","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.135.0","ipfs-interop":"^1.0.3","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"badc185203b243eeeeda5d8bcbf363ec52be93b1","_id":"ipfs@0.44.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-KfCHpvKJgtDcuJOmNpLNMz1qtiwrkheu6XSqiVFwPsKqWb9ijREQSKxEVQrLsOrkxMgKyREvsY00J+F8RLremw==","shasum":"33bb3782aee50d28f8cecb38c3a9e4949e1933e7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.44.0.tgz","fileCount":336,"unpackedSize":2318257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewldRCRA9TVsSAnZWagAA09IP/ReWw7oGuNdS8CqtifEc\nojHnHDmHTOgMXMdlEQ0CQedr1y7Mun6qPCoJxUlT+p/vYwzMZdbvLuAk8zwE\nSy4mnSlxDW9JpCH89PZqlGN1Hs47RaIB3rqeshyl+d09f7H0uEqNeMbZPp+5\n/PFtZ8a/00/ydcoLFuy+najNf8UlNaoFkTTWLxjhxiX8aUsvkWT1oyVZ07L4\nDAtPze+cgUdFZc0BCWkM49R8IRySDmnmm6xeDU4j4kGsIKvE8GIVg4qs5EL1\n6sXDJF4r0NHKPQ2k5M1hdc1Nree2hQuOrDQN/rZajiTn78zDsidegIHlb8CL\naLBBwHpj0gxWcK9lD2OoBwNHu2je6iNI0Q0Q/tJmtAB0pbWqKEvr/5CC/SxO\noJZOtIyvrmU8aNjGwCx/4n9beYqDnTba8dKv2kIU2TFlFPNTb3GwnvxzuRYt\nzZuyGXnWDIMsy15J1+UUM8YyjoajDj60EHx5NDK2aBaGvYgi3B70sCVAUqkd\nkCW7f10PUYCByCcMQq6bSDhKbDm2uL7zVINrcvuMZhHjVQ1bxUv1RauHaRVI\nlgQZoZxWzlXHNvqiZLeJkrarI1r8MOj6/W7XdMUkdxcyEgSujemyfxFZm7ky\nNxQ1kpxziK3DTfavYjQpYyUmMEXcItHERtWQIUn4v7HBMLscQtOwsH5Rn44I\ngS1h\r\n=E7If\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2q6+cbz06uNzp+fF1o7Jhi0FyIpq1Y36EpRfuOZzr5wIhAPZd1nKNJrrcZdxaiswvQrg4zum/g1XvdJ3JkkDjG6Co"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.44.0_1589794641133_0.2028351041910652"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.44.1-rc.7":{"name":"ipfs","version":"0.44.1-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.1.1-rc.7+115948d8","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.2","ipfs-unixfs-exporter":"^2.0.1","ipfs-unixfs-importer":"^2.0.1","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.3.0","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.135.1-rc.7+115948d8","ipfs-interop":"^1.0.3","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"115948d81811d7c7b5ede7be4b175cdf65c7ff91","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs-beta.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.44.1-rc.7","_nodeVersion":"10.20.1","_npmVersion":"lerna/3.22.0/node@v10.20.1+x64 (linux)","dist":{"integrity":"sha512-pgSQTgE3q6V/4r4oo3qGezqFavzqJ1S080c76sKxKgjr6Bz1WdWVdeCXGK0WTbu7wpfoDjmntmC0MA/GODQUfg==","shasum":"ef655714cbde9c873b49b08197ae881281893da0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.44.1-rc.7.tgz","fileCount":335,"unpackedSize":2311218,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezsSLCRA9TVsSAnZWagAAJjAQAJw/2VQHpD4Pcvj6mTmh\nrwJZ+Ozj4FrlZklM5XfEL7GX7ax1RhjBnBRvinKo9xzcrqq+FF/46TIe2APX\npeNClvglxR6Rxnh7WC5kXF1kFA6FuhAeBv3EhaYZEgIvqNT/y7I3sgRGw9Is\ne3EaXIhOYcxM5smXV0DmxQfQGaRM00IqWy0nmNyMVkHk2JsJsVdC5gg7a/F+\n5VSelYKKnc2GNHm87ZmbPqAzg9Fg8KEgtBEtVW1CUG7Zt/7sgeGvwfC/3bdB\nTQZCv2sljah9jdhkTkUhbNSWA91zndNH6rENzcJbCdMJ06PRNObSTWZzEsjh\nBoellBupWgz+VxT0d238z3228I2x3oZhLx1CXACPEXaaHdPKYlVBodzYOXIR\nhR6uQPmh6ASJaViOQQNBt0GCxcjbG9jmL84w95jUVfUwbXW/xVP+M+MB5Xpr\nOkp4nQCwOXMV5cPV5oeIyoNt52+6QEYyiZ1JXoirUHQp91R8PxWQe25D75yd\nL2QMqcjGeba7h0us4J5eyCRS4ELHWjZV8DNVRvSOiFFJlEWimvp1JVIWR5PU\nBffQ8vu9aVOG7Af07762+u6jwz7u7StEntOF5M6AhcYtMz0gQhiRz2R/hBEz\nE36dYEq0l3z6sk9MokdYMFNRRAzh7DDcd771W8kQfPIeCkaZ8hakUs7s7HJW\nEHgm\r\n=cLJE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICT/9lb5agSriR8RIYr9GIWOux7zLv0kQE6zck9VmB8pAiADow4URqg3bnIYXsnWd+NUN0EOmKWrODZkXkMbfWmc5A=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.44.1-rc.7_1590609034687_0.21400042152424725"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.44.1-rc.8":{"name":"ipfs","version":"0.44.1-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.1.1-rc.8+f7dd1c14","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.2","ipfs-unixfs-exporter":"^2.0.1","ipfs-unixfs-importer":"^2.0.1","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.0","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.3.0","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.135.0","ipfs-interop":"^1.0.3","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"f7dd1c149a4c7849ebbdcf73d17ed4afdb74fdb8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.44.1-rc.8","_nodeVersion":"10.20.1","_npmVersion":"lerna/3.22.0/node@v10.20.1+x64 (linux)","dist":{"integrity":"sha512-Bszw7UA4r6+gcDg6tiY4AOEytBZwzmkJUdBk5XglLtjhOvrzGtrxAiNQZIss6xgCjFfXsLQhKiuUgfI66I54MQ==","shasum":"ebad4a34c48d45e7972648af7ccfe3e4308f64cb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.44.1-rc.8.tgz","fileCount":335,"unpackedSize":2311199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez7z5CRA9TVsSAnZWagAAROcQAIPMff+L2qmy8fW5Jd4c\nWCAoZUTTTF0H+p2fTICaxwNJAh+oDGrNoXQThv3G+jfHpSwjXhCG3coi2ZOe\n7D7YYZwlssGsCvx0k47/oJ2309W8W5uKiP9kBDexNpbOIp25g3JQoEibRu3H\nN0jFs6W21qcfzBld4/dWII5Y5N1p4vCArqkX0fhItYLq6aoXYKIE+LV6vU+p\nHlBfTbqaJGAd5Jc1m5AAOmuiz8SLmaMI/mcHXAz2VtDHaKFqFJceJNbIvIo2\nmHd0ZafYEAWxmA4FFs9g77Qfr6GbU0KECscH4VEhEdWp7hT4b2tu5dluEJ2Y\nTTsZHmrAzB+LkufUWjsuLQopCnkrmtCx2YLNRxshiF4EGO8jGdEZaReVsG/C\nWu45UPRNdtsF6cUTGO1QA0B2sqhiE8npGC+aVbfucpmRG3zrQz/tw8tBKgxe\nTB97eJavv8kHWWiVMhTPynKerfimTKiRWYwNz3cSJPgT2ohRlbXMBci8oP+a\n3iPUKprrS8PdTcz5MnPqHkaVzFHvGqG4iv1yZaH1pzIaRJxSbb2u0tBeP4AM\nSf/v93BB3UJ81FhETicSNmW8MXz5aa6rE0GpiWIfipJJkfswYbontNRGGheR\nuUUTWcfGSWzykIYUt3ONy5ST9cz0f3msm03wQ7f5JwvTIpfSot/xYWXCMpTs\nRbBf\r\n=mwqC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHlJr4UFLyds0u7PsD+2s9ge83ccnS7DWJqriXB6LD2MAiA7tt/L/Y1ytkCChlj13vatC55Y5LfdUZxs0/OF6vwkfQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.44.1-rc.8_1590672633177_0.24691492582167318"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.45.0":{"name":"ipfs","version":"0.45.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","binary-querystring":"^0.1.2","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.1.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.2","ipfs-unixfs-exporter":"^2.0.1","ipfs-unixfs-importer":"^2.0.1","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.0","libp2p-gossipsub":"^0.3.0","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"0.4.23-3","interface-ipfs-core":"^0.135.1","ipfs-interop":"^1.0.3","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"422472c9699099634ce3c716f57fe43f989ae1c2","_id":"ipfs@0.45.0","_nodeVersion":"12.16.1","_npmVersion":"6.14.1","dist":{"integrity":"sha512-QAJNDnpCimjAQnIoBJWTIZoTppR7yBqzzCrte4IpmylyjWRIk25kIZ3swevHA/KvH0CJeDzqv1ZPGLCM0PwSOw==","shasum":"4931a8be8b0a7fdbe6a3fad5cd5cb4e65c9b4091","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.45.0.tgz","fileCount":336,"unpackedSize":2317601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0RKVCRA9TVsSAnZWagAAOZoP/28iEdkFheLXe4JUsYdD\n8oBgkqQ/TzfIpxfpU7WYMbVhYiq0b3Ap/oztcBvUh7FybkavM00d+4xeWHV6\n67XWmP9jTD0iJkQaLKvXrlQFuLupoWE80nS8hio/J0b2x5CzV1ChB11Qj2Eo\n/tywFmbro2Q88939wZ3An00CmNq6ggrJQxJx1Tk7P/Y+D5vBwnAJn1ZM2ETE\n1F5eoGk5YArfsjSg9Wt2kl5vJRqRvMHZYRRW40w74njXqLfrktufIBposaIr\nOC3a6Tf/seTgIH4fCeWIF+wH75+EfZoC4oqYJKgyloA7sZd/1OuoAw7osUXS\nLOI+/CAXX+PPUuNKAEEjsuDPqNgj7UAFmdZrC3fVeA1prY5aqLeuk/kfWiIH\naB7vwmSBV3kHOs5zvJktSLK4g26KmUTdnNjwcTjlCA7ZulO0ATCDs+IMZ/+F\n5ccy/dLcPuL1MBRnftIbV2whzNAiFD6+TLz2eTHrxL7Fpnf4L/HS3SIo9xC1\nVugosYzuwyBMFqk08OG2Fj49Jp/I0pU4ftD4CFOrq6JIvt292GgBdQ3RzMg1\nkagHnEyUkkgUa6nFR+GpJH+U2gbaMWT/D6msfdV63iYOCByGKBNTLh+6dU4d\nYKhaZB3KSwDVl9RfQaa04DigeWuTxhTFqIBixVaCoesqWD2HPMS8hdH4ttQx\n9cv2\r\n=52Pp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDED9VSVVqMS20oKNmw0s2lpNPkPZhc6k1VIJWNiZGWIwIgFptzRQQDfCxoAp6G3I4vmsZkOSUxc5u72m1w7xVq5tw="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.45.0_1590760084366_0.6494197150123999"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.45.1-rc.2":{"name":"ipfs","version":"0.45.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.1.2-rc.2+2530bbcd","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.4","libp2p-gossipsub":"^0.3.1","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.135.2-rc.2+2530bbcd","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"2530bbcdc8b54648996fa139e9c164147d93caae","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.45.1-rc.2","_nodeVersion":"10.21.0","_npmVersion":"lerna/3.22.0/node@v10.21.0+x64 (linux)","dist":{"integrity":"sha512-aFPZa+X0b8BvA1Z6STJ1Y8rOf1dXfWPqWOlBtwgxd508rGUImOcgOOOQkgoj4lNtFqXNStLtYDK17255eMCW1A==","shasum":"4bbb6536e08b121e11981ef49f5b23b497a4b760","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.45.1-rc.2.tgz","fileCount":335,"unpackedSize":2311341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2gCrCRA9TVsSAnZWagAAzxoP/jf47sfCYVCQdQ787tw9\nrJwLqqIwd8A8qhDvzooF4BKPbx0s4AE1FMYHgnRiobWMc/m/HA20HQ6cbEY0\np0iGL24EBFJq+pDy+izAU5c45EGMeBlBixMNuNVf8UcQSRaSkn/re9GZWs4c\nLCQbmDjc23CGRqR8tuJYPbwMZ60tcl/F/nRSFaMmzjB53YgIAAeJ3IC4esfT\n9UB7tBeodVNsXeWGw24m8yq+RZtr0A0lbtrqwRB+j2RUwZbO7XR0AnYgFHIU\nhVLlDkta8QuL+bqXdlMVmQ4/YbLjE4ak/9XlUVZRP9yqTtfPGHEWj4l2OB95\naZ+q8qglZGLvIt1yS+cVVhCWcznh0IJYJz1vFyhj1Qs/OLFaKolqmRkF8EaG\no6oFfDUecKH94wEGYwc9bc3KTdvpvTloERfdZrVUQWHZ7DYjJBIvYkWBHz1H\nCUmBoIKkvi4q58iVqgwBrNCBatp0J1nXtBLDyZ/lCvg/v5WFBzn7F5N+nhrt\nQ9xU97DHkRHpgoSX7AWJTek41/QGP4goNNYVY+MFxFyoNrhMF/rm3WI65KmL\nOb6/+5is0B31C2v/ry7hzY1dj1XdHGlefOwLLoheIRmq2Zxk9VymZt2e62rg\nXwhf9hi2e4At8YfTs5v2jGcAuf9YPI2uJrxbA0VO+asMY9n8vI1mkHgB11Lw\nr4QL\r\n=Lzod\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1pKqweuyUXW+DLhG4BoQ6KoUlPzFX8uls7qB/bT8mpAIgASUvjJtUIUSTQQZjcsHeEpTSRhiEQi6MSpxdQtBS9bU="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.45.1-rc.2_1591345322517_0.4191922223029152"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.45.1-rc.3":{"name":"ipfs","version":"0.45.1-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.1.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.4","libp2p-gossipsub":"^0.3.1","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.135.1","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"d043138be2c0c7fd458131d56e235edec1504ca3","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.45.1-rc.3","_nodeVersion":"10.21.0","_npmVersion":"lerna/3.22.0/node@v10.21.0+x64 (linux)","dist":{"integrity":"sha512-t0Fx4Hg/WGUcet9eCqP+yVhHBlWE2C2YKx2KW0SLOt5MiDI61qJ0f3aSPvhOwAnuv1sqGurAemk4t2n+G/Xbrg==","shasum":"8e8e5fe7938b0bb8deb9ad55582007e35c3d9ced","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.45.1-rc.3.tgz","fileCount":335,"unpackedSize":2311533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2jjfCRA9TVsSAnZWagAA+x0P/0iUK9f786ATjTwNQirs\nk6kjmPsDQI5kd5G3t5B7aMgVijEPT1PVGcjtafuSRYObV4eUQ90E36H0pVx8\ncy541WpIUMfVBUsnkIZiP3MDdDdOtDPLGrmdZOEVbcHJDwAbUnTHo2FESXV5\nmH8cS0eu4Cu4c/Jq/lZQ/nBORBuYlbTApy3vnEBHjlfVi+2AFzU19lhGAqMF\n/cac5vasdvBynsBxWP8RDLGTwEQjjpOUOcp0x1MGM68yi/Rkguv9zY7rhcMu\nLDbpE71hdlc5/aQLi7NrqWQoxg1eKGNNeuvwRhYXTanxdVi91r6ayUoWcojD\n/CUnCxjoIqasM1VsDVYYaOCT2zpLrQd6uSscLc5uPua7LDpvSAymVef4+Txz\nEbCtRGND86UwLa9XNLjEacqMqieVvJmIb6vcUdYdL11/aFZv3W+aLU4zLoQQ\nZRkvBp/z+AMsAzg/VqQOiaWtdPxXE9B6fT4TRFpva9u6CSacp+eff3Wo8J0K\nktuBqgdBogSDlMAHyx1IHWv5vseGm8aQuv+d6jmw9U64W6v3Yc5m5xwgh0NA\ngRZM62PIMV8LS9FPH3up2DwlV24AtWaoxXLb33FZ1j2X/ApBPTe4l1ytafgZ\nY4xtAcBGVh6F8XiG2tpm3eNNuVNojVTHMOoonCSRMSJvz/Z+fRKWIQbJf/dv\nucp3\r\n=iA05\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAfqys/Hr49o0syLmtZ9fY1l6sFdy9/bUG5IYW0yZLlWAiEAiv3e/oT8xYz9h7n1amskMOhW/GZX0Jk5qnM6jIocqTk="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.45.1-rc.3_1591359710881_0.8202866533188189"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.0":{"name":"ipfs","version":"0.46.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.4","libp2p-gossipsub":"^0.3.1","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"997d93657f75332e8cadeab2865a2d90ada60b5f","_id":"ipfs@0.46.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.0/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-+xPQZSvQut80Q3Yo/gGHqrbJNQ6BCn+pS6gJ5XwAMXwTQf/hRb1nXd8ZJkeAxhPZpjNArp0PPDQbrBWhyJkVfQ==","shasum":"8d4e2b3a7e0a128dd597b50f340f6e4dbead6475","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.0.tgz","fileCount":336,"unpackedSize":2318166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2jvgCRA9TVsSAnZWagAAw3MP/1d/rXuR65KH9mV4g/5g\ntjkgjmPh9bmdoP55Hh0s5dCWJtgpFIbxEhchh1ROhpkpNRQQFUQd7AO2BG1a\nQG+Ic0SHGXAMfwFjotNMuWdUPTksQoXKHz8RHWhewyJdtgL2OKeBcF6Y9CyX\n391J50bzrM8VdQW+jO5kYIV3q658WTb23ZjssFTLB2nGTZx6Enbsd+oR5da5\nqzx000EyLctyQFibiSGAqBdc3DMV8hfVqt3YopD4boxPyTK5Cuntf9v4EhIH\nczSKEMJNqwyDP9uCnr/DFupH/UcXZKpUL6rb0tUXQta77oL/dDLNSmBiLw1P\nISOor9gCVzAEgaVZkpWZrdDvNnDzuWzsv4M8xWs0dr1kMztSZOw+AScqksMM\nB7z6k3YUt0fCR5sc74CpplrIpFxMjOVk5m9J7eGsXNQerRFmsdpYCuH2CIXH\nGl/lcLZ3U9QMU6/T6r0QLt/f54c90f4viEqhCxwt5xuiQHn2SEvRe80nbfv2\nDLIMHnnpHQKtE3ZGUS/limkPYizUiVBlVZ43QONO90r+tTHwQ2hXwLKqg+N6\n5uotQgCrIYpFxjZ0mUmvj5D8I47V0Z999sOxcZEHnn7HN5FU1c+cpq0RWSMq\nt/P/EU/Gc5ODcViO5oHpNslkvTlQZEgduJHdpqM/2dl2P/HWFMVnrn5P38Qe\n4ObH\r\n=EIdn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlWilpTcq3XzHnroYPMemJWMD2kvrbXjDetiKGTS5FjwIgTP+U95rg+36ov6IpdQcxKFELD9iUiEiC6Z1LDKEJjdM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.0_1591360480236_0.5480085761859512"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.1-rc.2":{"name":"ipfs","version":"0.46.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.1-rc.2+463ec665","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.1-rc.2+463ec665","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"463ec665f8659558a75bdb1bfc01f1c93f5889d5","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipfs-name`](//github.com/ipfs/js-ipfs-name) | [![npm](https://img.shields.io/npm/v/ipfs-name.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-name/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-name.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-name) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-name/master)](https://travis-ci.com/ipfs/js-ipfs-name) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-name/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-name) | N/A |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alan Shaw](mailto:alan@tableflip.io) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-info/master)](https://travis-ci.com/libp2p/js-peer-info) | [![codecov](https://codecov.io/gh/libp2p/js-peer-info/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-info) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-keychain`](//github.com/libp2p/js-libp2p-keychain) | [![npm](https://img.shields.io/npm/v/libp2p-keychain.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-keychain/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-keychain.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-keychain) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-keychain/master)](https://travis-ci.com/libp2p/js-libp2p-keychain) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-keychain/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-keychain) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-circuit`](//github.com/libp2p/js-libp2p-circuit) | [![npm](https://img.shields.io/npm/v/libp2p-circuit.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-circuit/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-circuit/master)](https://travis-ci.com/libp2p/js-libp2p-circuit) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-circuit/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websocket-star`](//github.com/libp2p/js-libp2p-websocket-star) | [![npm](https://img.shields.io/npm/v/libp2p-websocket-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websocket-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websocket-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websocket-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websocket-star/master)](https://travis-ci.com/libp2p/js-libp2p-websocket-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websocket-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websocket-star) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`pull-mplex`](//github.com/libp2p/pull-mplex) | [![npm](https://img.shields.io/npm/v/pull-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/pull-mplex/releases) | [![Deps](https://david-dm.org/libp2p/pull-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/pull-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/pull-mplex/master)](https://travis-ci.com/libp2p/pull-mplex) | [![codecov](https://codecov.io/gh/libp2p/pull-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/pull-mplex) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.46.1-rc.2","_nodeVersion":"10.21.0","_npmVersion":"lerna/3.22.0/node@v10.21.0+x64 (linux)","dist":{"integrity":"sha512-Q/6NWozrn03kILaq4qgcU6bRmcgZHJYz9eDWvpf3dxgH3gwciHz55+owU/BYnwYxbS1KnPLxQ5/ormm4zHsRhQ==","shasum":"00ee916781f0a3348e5d48a4c0674a166e6f1db9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.1-rc.2.tgz","fileCount":334,"unpackedSize":2315309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3mKyCRA9TVsSAnZWagAAhaEP/3sIcNWNuBrPyV6nfrEu\nGwTjnL5AZokjxoUsGRZu+eHrRicSgmKvIXxiRAAZryg/q04DtQZmlfHyvfQc\nczKqNVOP/UcWv0Th0xdL9crE3P4mrq9n1GvdY8e1XcbtTJOj5u1E0NDyztY7\n0Ml08Q4ZUX1U2pgLa3U+knj/U+cKXw8aMV/P2jdArzzRDF749N3HSfCiEkgy\nOE9tdq5q+QML5LIGB1HZwpj4irxEDsltoTL+9tdRgC7uUI/BELiaa2wGhBMo\nh+LDiRD7MpSN1e8hJg4IrFjZRyi/WHlmQOKZ5Jq1TTPy8AmlfAWt5DNhFaM/\nThsWudYIz14qAS+Wq+CgKlDv5eBOuPFbQKbzqs/z3HYTDwUK1DF4RH7GmOeF\nNRfjy9qlvWl07sKcjLvCpJKphc78HmHFHw3YdxxdYE0xvlQSGbUDU+Adu4gt\nw+61pjX/ALnxytjlIHLwn3PJsIXLvjEQiXu4g/seOIvMRCrEyOcXTN+SXi2c\nLOzJ0J4s3B6BKQkqFvz5PZjV+i0c3zYNiRkHxQHgNap2XIS9WReBQp/4mp6r\nhPzg7f6neXa6swwbjrbK4hewEGTGnugt0mmnLKdlnUBrHk7/zq+5gS3N4NTG\ndss+uUE1yhD1rnqX489uyM/WlCubD3vhw7sM1b3PIp5vKCaizCUYqvi8L6da\nm/18\r\n=m/uo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh5o4Uzy9+3s/EQ8JJxqVeHBnthpm37TGHU+JtSSPMJwIhAOaqtBpUb+8JqfUvSxFvclX5ROERWp8RK/lrSZaTeS/t"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.1-rc.2_1591632561790_0.2998985896678019"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.1-rc.3":{"name":"ipfs","version":"0.46.1-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"832271e9958ec6faa0bba5a8c0c76a4f7ddac716","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.46.1-rc.3","_nodeVersion":"10.21.0","_npmVersion":"lerna/3.22.0/node@v10.21.0+x64 (linux)","dist":{"integrity":"sha512-rP+IkLDaRVzK/ZHSQd1hlP4a1vYjI4f5e4iyXeBOBZsqxQx48HSJS+rSn3lLHT27IFD/W8BIkbdzKD3j8u2KtQ==","shasum":"92188c62a3cca3b3c8b8d3033ac9da300cdd52b4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.1-rc.3.tgz","fileCount":334,"unpackedSize":2314892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe37sqCRA9TVsSAnZWagAAxkMP/RrdJEZsDejpjvBsDk3i\nW8+A5ssx/xFkyeBI6xkYtpFSveIriVp7RPQFqQECYmspdrJxTNNy8ucuE/1p\nGvnru8Vw4WJB5XI3wR4DHZh3FV+Lpqv2Ma9zy215oetC0Ml573okkn0yd2mU\neD5XwiSe5CjY22ZaVlji58IolLCeWrAITX2yc09rq9Ru4am/f/lKxPAeYOAb\n0l8SYttmw0FHsYrjXS/9JSRaywCKrsc1yuyv3F/wOteO6HtLf+R7WBJUCBJJ\n34w+ZwvIfYSqc5HTf5ZQTez8VBGmNCPkulxGoJfdtCpxBzX7IzR6ebDt7zU+\nfJhj/4KHggOdLzRIB+j0WyWDRVrqQKrnQglqavE7VZInL4KWGA4uu747pIKj\n3ZdnUTwQkgT47r3D/aetRuNBsGD7fJfYwD7OUa6zzqKl3P9b+daP4ADSez/M\n1iT0qPHJ701kZRrygHeb9FqpC+l1vuUtSvlZi4yPHykGGnl5PwtZKNU79tum\nSL/Z84OyaXv1M5PNYD2K05iUIB13j2vaRemGlCJPHb1qTSxB4DcajZxUbYRK\neThVmyqXzPibNZ+PQRIF8ZdxTawWDI4DfTdY34wTU9IaTQdoR1sz83vArgYM\n0HOaSHVIyN3gemXZ3tYbIKksAVsP4rODRWKVw/Lgy2n/a2ttO56flC9IelkT\nUPQx\r\n=yubG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBDejToTljhqanxDb9reH9p9RzzIfH61JVBMfJMJEpoUAiApYfpSJzbKIKdOK+ZjGpEhkl4cu72mIoHVPK0pWdg5sw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.1-rc.3_1591720745472_0.123601162700264"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.1-rc.11":{"name":"ipfs","version":"0.46.1-rc.11","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.1-rc.11+16587f16","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.1.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.1-rc.11+16587f16","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"16587f16e1b3ae525c099b1975748510638aceee","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples folder](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) folder.\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.46.1-rc.11","_nodeVersion":"10.21.0","_npmVersion":"lerna/3.22.1/node@v10.21.0+x64 (linux)","dist":{"integrity":"sha512-+wrDwPIwyghiJgSjjTOxzUj5l0KzCAQJ5Yk3V7/ZWFWM/rB9ixGOFMWn2F9YFT3+t66krZPhZ1i35rVEw0v38Q==","shasum":"e0d7de9f05dff3b049ad6d866682481b35e26d19","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.1-rc.11.tgz","fileCount":334,"unpackedSize":2378854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6OSUCRA9TVsSAnZWagAAoS8P/jc4PLWIs0iZxwdJkFM2\nfBiyOwdFtpign1rB6faLWlUUKhYAv9PlFRhPUb8wEB+1hiP4C9XguzprE8mp\njJO2c+0Nm1bbVjLbH0moKPtdWbKiyW07TT93bEKpiJmUuWSq4sRjEMifV2Nw\nydHlER4m9iSsCiegBzzQnDI47mPGOno1K3gppUtgFcsTXqoWVxblqPNNqbrO\nBhpGGs8Z9z40ShzgQUEKJx2gGK425AVa8qLTyLquz0nXhnP6ZUlpjj8IZ5yS\nnLIUWtR49yRnM6mylMupRMjHUKiSmqfMTqF6ufj9jRU7fj9MCdPNKlSd1h0f\npPs6fU04upT9Svf+8SiVai+ZlovllK3BLyh3wg8Ps+G/81XBfLt75y9qWHgj\n910gZcJqnwUmp0i9ipQRVaegNXkzNeeyl/8woHU9qtMNKFyVvldMTH5v1XcK\nbjZ7zJzewZgXBvQQZQGPjQO40ra8WYzc00+GPmpaSu9wLstXVk6jldCI1L15\nT+0vBIN4IOZyn5XU+y8iIhi/aVyaULDKiIyy+6a9FQwTpYqNXUSrGUv3xRbg\nvmZWbtjumGDOsBzpx3DrX7skH7Gk6KFQUiuIRbCFm82c5dzGf7zk/jjEKuUw\nm2IyuWGoJep9n53f+7em/Oo6HZHpcXCFY72O+aEhs7rfWgl/Kf9xMWfQMmWF\nntB+\r\n=ir/Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUbBMPpGaz25hGDxQm+NaN5Qs4XOeQ/K2jqZm/QUw42wIgUvMYVCb9ImTyX3lbeANQfj/n3p7cp0w8wRKyXL2We88="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.1-rc.11_1592321171914_0.7562407433358345"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.1-rc.24":{"name":"ipfs","version":"0.46.1-rc.24","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.1.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"660d3db9a47bff652057762b52a25529ab37117f","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples repo](https://github.com/ipfs-shipyard/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples repo](https://github.com/ipfs-shipyard/js-ipfs-examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.46.1-rc.24","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (linux)","dist":{"integrity":"sha512-JcrIK5e3Ia7ZnsNs2qj06cbZbiYOQgGfsJyqWhg8o19dC0YFk9QIpKTf0QkhOIdnuUiYqdGl4rJcqdWZAnqP5Q==","shasum":"e8787980318083725812304a693931f21c5c4d93","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.1-rc.24.tgz","fileCount":334,"unpackedSize":2532219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8K3/CRA9TVsSAnZWagAAIJEQAI0OrFRSYx7GU+kZSymH\nV2jXuZnUksQcpCFPnwsMODUtPEfMbgWOlJJ4nzBRA1RNEnMRfYugExW6FZ+f\nZ5uQSLR223Wkar4kheksd5hMrBV3hBnFPiFgR6Ul8v4FXEDVoVsbGQ5LxIVg\nn25hYELGZ9rUUW4/jprrxHabC0Vx8pfI+kStFrW0Fi4XKeAlbVCAvKIRedww\nzhQKcOLQEv3ZQI4nbopLDccnpiIWvr1MJGo8V745IsaVuPQoxtbvwp9+vxjn\nX5vY23yYcWSPxyd/HfvZWPBhCs3dzrZNWfcbQon6k/X1BXwTqblmr7hAvfJS\ni2xi39XDWIDh4HDGiZFCChDHxxObE+EEdhDWKhDSRDuU6ZKmQiDi7UmqIcm4\nN0WmCuLO8EnvmZ8Bkg+d0xNyfg0+PTQgOy7pk8JfCmGSb+MjtLjpQoDcHoGW\nHpQFyySUYJlbDagF85+Va4wAlJLGCNU+ilZ3teVtZjWlU6/m/h0VNFffdVez\nRe3LhhiIgqzsSZMLJPGWpreldeIz4w/TPdG2mDkdTPJk4a/HnefhqPrxr2eW\nHTMoVLQmGqu5oms7IihMkjy1qBsegPRlmoPjg+AkzZWDEwwEJ/fGLWnlhsY/\n2Of6yZox0nkvRii2C9zTzwWQPW/LjjCXheaIszRqb8aWLyPNcLk3qtBzbD2q\nGkBp\r\n=Wjxr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJLsKCOBQ8YaEnvRQ6igteWrgyGuxshtPNHLZ4sKLEewIgdHDC5P1hCT3xLO+AWakDKr3N/1mAFnEoDR7WOQB2nss="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.1-rc.24_1592831486964_0.9027980899170545"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.1-rc.32":{"name":"ipfs","version":"0.46.1-rc.32","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.1-rc.32+21dab486","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^1.0.1","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.1.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.1-rc.32+21dab486","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"21dab48691d9344626f5898399fe725176f6dc67","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.46.1-rc.32","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (linux)","dist":{"integrity":"sha512-d3x3uCisz+kzNZQSTNjoUxvXoOTT0yEpyKrYqF3DKP83q0ewL4JqGedIoNUQ/3Mq6r7gK+lwnsEqA9racEOKyg==","shasum":"8f7bba5ce50cc9c61070b78c096e70f35fd16b28","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.1-rc.32.tgz","fileCount":334,"unpackedSize":2570661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8e0VCRA9TVsSAnZWagAAr6wP/jx48Ogrq7cWKOdwYrYg\nGN/hbC4g64ieqOML80tUiDGtPG6AltkEF/WeGL+r37pVbu/s725P3vMfnAkz\n72n3OhSRCyZ+CYkiZgBf3aJKQgiwVSZaj1jNvgdfMW08KeFwjVQA+/FQasX8\nl8qjHNSHjnMDrC9mA98dYUm4yBcb1IMTLYRgCt4SYyFAHFCH21kNK9IHp8z1\nqB9T77lLTZeFPzstKk1KH7G/+qzpuoVPln2tp9lekjLTFOPKRT4sFAE8G+ZK\naesh45QV48EsI6wIfOt+Y1yQMdE20VUOwOt/PrEJmLG545KlBX5KM0l9LAJS\n5sJCMBV2pMFjnGns8li67mK4Ks1m3abH6MG/QAm2zkhWELGzsljZVZpr/qoT\nBh3qcq4oxpeKF1SMyzjd0p5bOqRLd6rVNg5yI0eoIQkGM6eDyJZS5ds/Q857\nfL61iL2+RIHz0Md3KG2wT73JS0HWhnXsyOJM6o7Jq4w1Yu5Wn2PdhGzdtsR4\noibzJnogD2s67bmNpUEnLQaafmst988F29bMawXvlqBj2e6ravRYIB+C482c\n/5BQ1iVV4svm9BPSuZiadgJAyZ1Ei3C7jOwE/wAUR2zZ0h1Q/4pLRnBCT8TK\nBFcPo2/BBvFYLqb/AuUzRS7pCQF+xc8vvGELwO+t76ngRMNxOGhDD3IGybDQ\n1iH7\r\n=SsUH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL2ujySWcKdHTRheBm2RYCiOlgO3JfF0xbEx97U5OcMwIgGPghzAEueqq+8i0/V5y+5nhozf0DlG9E0XVX5cE3ieg="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.1-rc.32_1592913173029_0.6171606594325139"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.0":{"name":"ipfs","version":"0.47.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.1.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.137.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"274040bb440b534f8bc7bad695d14216ed4162d9","_id":"ipfs@0.47.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.0/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-2eW+0yRvDo3Lrm6RXpbzR2YqReeEo4noNoKhq+6wVg2Q5dSwcjuxWscSq0l7bARxegA73Hy6xWnDtFAQXrNQOA==","shasum":"a9fc62b552856c3743c435c6d9790d70f4bd92e0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.0.tgz","fileCount":335,"unpackedSize":2533546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe804iCRA9TVsSAnZWagAAQowP/iG9xpUIUXkvKveUPq0U\nGxi8APLRdqvBM7J0K8ERtIR8sWh1xWmZdymj4rGGaL/zw3adBplNyetkP9L4\na1Ggi5+Xo1xZJp33c+ftNxutfEtOr2uIAZWqFkQk82kd4ydZsOJBCv/b5g7e\nlGuS35HanvLqsG7/J3mGhmb4+mI7emuBuzBWj4hQHPuERL7pGN5dS+0/ozD4\nZ/A5BEXc0bXeUBVvuefmvTEvQ0GmAV1sYhJ2T3sqI9iiJZp7e7CLgB26tOfj\nfJlkz1YvtLVX4aRn1bDY+rwjZ2RNAKngN9K/bfr2a47tBXIWo4LD+vHM2aoN\nQM9xqRCURcygcmTgIf8/X8AdwMY23Es1C8tO7jwqTTnftdksdII8IEycq0uO\nzwglVv2QiLb7gxYhACMOsUzpeec+/d+ixL4K7tJM8bCHabtmsOBeCcG9KT+i\nXbJkczDsM9Dnc/jwCMa+QW/2v3WZz/+ATa/nFJu095jbDKuhACJJb4jFpFqT\n6NiLlCBctdWZdg00jLWeVi7gkJ1C3xgLDC3UgHxwjEfy/BCCW92EOa4wxbHw\nXaVzPM/k6j7nVN6wDQX/+cV3cBRcL0uLA0s94S2ZyuLpz+BIJ9XyYZVhy8MS\niZeTixxAwLVyv45bhkySCqclR48o7TmkD3nMchJvnEsO+D8HbpJuSk7pcFSs\nbuDB\r\n=plf4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHhuK/q4QhRm7eEMtZpEDVoG+DlQ7iiYp220JlTd07bLAiEArObNpAGbvTxfL7llbqvHm6yNRT6SwUsnhF3/EyXmjhM="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.0_1593003553955_0.5627797409611783"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.2":{"name":"ipfs","version":"0.47.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.1-rc.2+343bd451","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.1.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.137.1-rc.2+343bd451","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"343bd451ce7318751aab9934981e3727c6025234","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.2","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (linux)","dist":{"integrity":"sha512-HzxcPiJXeoGRx+rZgYh/ND8bOWKzqYhfZoIAqx1KHB1pA9qVTb1iI/XqJeMTqhXVmX7s/wSPUscH5ZocdfEW0Q==","shasum":"3d0f9626ae178630bd34f8d8a8c9b60d13877dea","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.2.tgz","fileCount":334,"unpackedSize":2574480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9JbjCRA9TVsSAnZWagAA7Y8P/3Os9YuT3IyyEQpn083R\n+Hy6PIlm7x79L1tQMDH4Cnm4qutwL/sTK8OdxW2tgw0eD5t4sJioPai/2byt\nrDO14z/h7E/n4Xk0nAHCFvZe7lQKJGlRXgJcLL4JZh6Nw7HRfDF3pmRADj5S\naJOVxTUU/Gv8FlerRwMAB/9XwOEWmeI1RjolO1GD646MlA3iBzDwyTLOtA1z\nCc3fu1f4MfMP4ocPWLQte8wI+JXZopvxuc6Z/jX9xYmf/sjXNPt5hq7VrZww\n5cDFSQURjE5zVHxwzdrhKfy400UMjQq7MqTYpJbseYmySSVV1QTaJFWRsL8S\nfYEbPd/472YjJ0sg/mWfu3X0fgabwrWSqOUdaQwu0nP3fUuYBu+w9zIfyvsw\n6lxH8x7QuOWhAgk4w95tiOW0HNp9hXA8cwaS7N2ghVZUvJz+tIJM83UA0sVV\nvnBVjTsxTm9VWFmqwTwrd3MRZuqIv/9AhTre+/5b4wX9mvgHOHJjgGox/aHY\n+4B1tmQzvLIp57KZVIK2+ee/VaEfvZ/cVSfgz+cZXSDXWIHMH1O+io6e34lw\nTKspBjJjO57xtjU2qQvHBi4IxUDGUxJJOlA5/ILIFFOIS2Hn4VfZJOyx2VEq\nv9Hx5DDWiisO13L0eYIUYrIDcwR11LESN/STKVOYbSFF1sF+BVAyrMG0zyCs\nv2ym\r\n=y3jU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmShYnNNrffkxzdLDeQVsMtgVNftwPBqQTrqy7BFY3ugIhAKrFrpzJ7xJgJLlHb7ZgWbaE1/fxFCOIEzD0noc/mAOz"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.2_1593087715168_0.07791951823924115"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.3":{"name":"ipfs","version":"0.47.1-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.1-rc.3+a96e3bc9","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.1.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.137.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"a96e3bc9e3763004beafc24b98efa85ffa665622","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.3","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-ifuEMfZgFyZpFiK+kULJC6cy0op7/dZuKpy1gz4I8Qi6X+ywm/HHNfwxbNGHwTn0c882H6w4Vv5FVKQbAGuknw==","shasum":"6c7748426dfb96ea3df3fd51c9694abff1d0b7d9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.3.tgz","fileCount":334,"unpackedSize":2573108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe/HKcCRA9TVsSAnZWagAAPBQP/1k5/mMwkQ9c8u1ayB6j\neNjdgD0yMpClvPR8y8UDzvp9FIlniJgLMtthazz41CwCsZujX3raRlRAIR98\n/TyEtm33WNjltbJWfWKk/mDE/XKQ6QZmrJMDCn+c1YzWNtb62bzb6jI/LIyR\nnO/++OPDLhnF33Ao7XWHLtROpZZem42XeDVfgmc7yXKmFtlsTZ+OdHwWeyPr\n15c1CI8e/u6H6lbktHOll48Rmh1osTMoj/urs9G0WiWMZqTBOyYUe9qY6uuK\nfi3HGGfx/8Mr1c5osenVu7ZqiXqP4dF2ntdEEP2GeFgiiDs3Ta3ZN2FzE9Dq\n65m4t4VARLRAjS3+XOLoup9xj8SwIxiO5Ai1iM8A89rs12ZPuphD2Bv/7gKI\nh4synV8Sqh/VXlhuhKh3iZgnEhCVVFubUzxfTpsLxxyjIiXHFu4CdRd5joGw\na2nmxFfJii7L8LxID75iAhZ1RMBWl56plJXS5eCXOg4DFEmiV8HxUM7DS4BL\n8dUgwqTDbUPWRfZVSPUD4Ix6GpsCto3YhX2ibEG+MvXznD5yU9wzOQKfYTWQ\npIPVyxrSBA8DJPjLWe8+0iFX/35/eTRqldBns5HZVuFgAo0S5CrSvU5brrf4\n/L5NJLqoIJ90IpAZP+pf4IHDRWdIWDtg4R3v0hpkeHWBZkIFwHZcnEuwpfCH\n81nA\r\n=fTwY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9pOMnFsOoGkHSnM+6MM2YARZMcOY4Sbc116L3r8MHQgIhAJYz5ANSikUG8/4bLEIn0dydk8SQMtl4ZaEfuTjchJ0m"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.3_1593602716119_0.5587430118958248"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.5":{"name":"ipfs","version":"0.47.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.5-rc.5+03b17f5e","ipfs-http-client":"^44.3.1-rc.5+03b17f5e","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.137.1-rc.5+03b17f5e","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"03b17f5e2d290e84aa0cb541079b79e468e7d1bd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.5","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-dzogKAEahq46pDhYRor/uk328h2jc99KcZIvQ89XVYnPmIshSCO5mps0/lYtTaFWgNnT4XewQJ6OdriAA8slaA==","shasum":"9d95ec209e13da7b5e8421329febcc01d95c8a36","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.5.tgz","fileCount":334,"unpackedSize":2599256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe/d81CRA9TVsSAnZWagAAtu4P/jeKpqzEmOK40X0gWrvT\ng8AtTBGr0v9vH1KFlFQB4hFtgBgRf66k2qwaEiISK5f3YQm3zYh1xQN3gfTk\n5H9U+yuubz1wSvm8/Zf34ZgwSWMfi50N1gBViAD+gnMwQERTeV4MO5ASHroH\nJ71QcnDensdl7Eg610sqtDUPvf0Sl6SajTHebo5KPhNLCZ8OctYs3eA4Ixwm\nMtynTUhmG+TSVgmwZm5TF0Ucq5Fv26GOWwRvgns/pA3RwpOvXsYV8jKmi8u9\nAVhPaIFe+EFqO6yiP1H59AvZ1DdhjAOjEdE7gb6lkUKtRn5oxVa1O/E+KXbQ\nrAmwrp93Ux+qx5DRJRVzP452yT0RslnKGifPEs9FbqAbsyoj12oEL+brHaZw\n4hsWn+sxm5ofeXKGO2AwBIV7nqansVFZgJFcioEuWmvUyIWfSVkn4K/oLI+O\neZT0czE+W3CM3bef12zWSFzul6gLERrIOl2eSpeHugrI9IQzDVr6wFq/x/g0\n6cbW4z79H8enSnnjtVPAOja9wnbke911Ga/+Zc6E+aXOWc4iwQHSV0SWmLqm\nEjlK1d57H+x2WvUAbjMDEK9ICgb19d3rkyiVvP2/W1y8atS8YAVQqomS82jY\nPil/66W4PZWTI4kfoFIycuVeZwwhIUfEPMq5ZVm2YLUfLbpMLDAwGMR7MP/c\nMPJi\r\n=H06o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClVlPZNlYYxhp5KKL2UYNOsgAJJ6pQ4NSgQo6a1eRVvAIgRQ6fBIfxmk7paExUJQxG4u1ry1h7x546EId1VS9PVJE="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.5_1593696052878_0.7487031366967969"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.6":{"name":"ipfs","version":"0.47.1-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.1-rc.6+65f8b23f","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.137.1-rc.6+65f8b23f","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"65f8b23f550f939e94aaf6939894a513519e6d68","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.6","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-IrKjxMDUWPJSkO+NtL7cAuC1KSPHPVxMkuzB4f5hzFQEg12uTZkgCAhhcThRpbNZuEkJBx6kdq1el/G7VLGlhQ==","shasum":"16062c98361de181bcba43a422ce52991cd0fec5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.6.tgz","fileCount":334,"unpackedSize":2599835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe/epgCRA9TVsSAnZWagAAArkP/1LfDy7M/eRdndZlkY4c\nsMkicerdcdW5EsOWViwCkpp7Ix4Nva+uT7Envu3SC8U1+VAmJYQ1OnRaxMSi\notDC8Rl0X4BPOYu+uagBnc+8O5gb8UX7fkRIDxLd9yT82jH3Fe0SNkWhFMo5\nilXvO0AlL63V47IcOeWWjAeBiLlMYYxuhOXI5oJOUK/wTvoyd4WKuhHsmfCL\nD6Z+c/Hz4d+0tDJhcT97FoKINoT+ILvxM05zM71jsly9VMS5b1WwRx9rJyss\nzMJcE6/I0qVqbNtqgztX56YPBWHJErhY+olrrzEK//GuA9JniRLMKrQw+Eg5\ny2DuhNjC/Q1GGaX34X70nlbMmn0PHjSU8LV04cHuubbB/+cImJxLhj1xD/Zs\nMH6pZs0KlTikXJouG6TgP6HRZbnwp9H7C97cyqGlpBexXsisDUO4rRTklp2F\nFyTPsZAsTW/BQYR7aQWTj61LWs6JkGsPswlfQ37ThS9EIG1spJ/p1ome9tyW\nTZImc2XDzGpecJ4xt3dEISxKU+VSZCMwVO+X2VhlJlAyNZZu2mWvpMEE4Ryy\n2yr9NQBXVnCsOuvElb1hZnCaPYTCT9/9Yn157qNNTeY2cSvXj2FKCdqOS0ya\nVXNBOpSeyfJc3esalsvuuk1OtVkSRn7uFJphGvb8cIO5KWMoQ0dWGRAIdAah\njWpu\r\n=0BVj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOX8Okjic4DcjWynpkVd9DXmrAsRuJXqGNRLIf30d3eQIgEDE9Cg7A6kNdhj6fDSpKDqhcd7q5hwWoEBE4EmKDq9A="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.6_1593698911893_0.524576791082046"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.7":{"name":"ipfs","version":"0.47.1-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.5-rc.7+8cb8c730","ipfs-http-client":"^44.3.1-rc.7+8cb8c730","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.137.1-rc.7+8cb8c730","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"8cb8c73037e44894d756b70f344b3282463206f9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.7","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-vYYnmsOKReEx4difE1Uel0Vs0vb8ELm3TPs/wqfV68jnxImLCLWBk7h+zGrZJY1km57sCpcO0E7WDUXC5AHkmg==","shasum":"c63886bca0b47650894742c2f2d4b39456bb549a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.7.tgz","fileCount":336,"unpackedSize":2600662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe/iMrCRA9TVsSAnZWagAA61UQAKAeBqKTkdijT2HYb3xd\nQmsN3cVtOG6aQZBjUjHWeIohvMDP6RLeQmbeFjH+WddiVZrQW5zSj9HDgaEL\nJRJL+0z+1zebvsWaE3jKnIJdAhFEr9kqi4NYqWiVisxvFwntvVUMQ9H212Sl\nnS31K9/VCqmzeQx3nOVLS1rHLkTFUqbnoEviodPTbo3qwSpgJLQvdjzvmbBM\nqDancJrPNEXuHmm0ydc66rsEpLG8ChUrQnhsK0PoOPYE8snBkFxBZVXrGQ3H\n1Q/4a3ABtHo1kabeRyNE+SPWFooo8s/mpvsI5Vn6MufLf3PreAnhzOKWX8xg\n1AVTucjLTtP0Yw5IhTeRGrSpvNbeGDiPv0P3PvZo7dEpPIpV/zovbDJDjiq2\nqk0cFKFZ30S0qvpHFgoFlBK1JCAbi9ioZ8rvZNn/ZJFhfvuP/mcyCs29SMFA\nXvbD937hw4thKZ72z44ZDWm9zg2CDj1z4VruVg9k9w5Wd4LQiHDX3DYIWc8J\nuz+h1wUhX/yINgrpFu6gdNb+CWKCV9sQOCYs77BCZ29FqIQwOsiRqicHK9Q4\nq1ZnNLztB5KbKeerK5dOR2G1+veOiV1zW6FeGnfjFBnzkh3H3FoO+MBt32iS\nxfPJ40Nn4guPcUd2QeVNSGeDU8y/+IhPORerDPz9y3KaDP6rHnIvUfqcpG1L\nh2PK\r\n=fObV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG6mgKIkC/eILPwYtfhGydAND/BYqTg1hdr9+U46m+rgIhAKyCVnz2sfgdoTXZKPOhCRVmHhAILlkiJUpHRqogve2L"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.7_1593713451317_0.21249952112325943"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.12":{"name":"ipfs","version":"0.47.1-rc.12","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.6.0","interface-ipfs-core":"^0.137.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"4309e1004bb77ee276b57228c35a921fb780a227","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.12","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-Pe2A4xRey5sqCvzFAP2tJ8MhdR6RJNg7r6Ap3pF6a4wsoN9aI5ea/wLuEQK7D8G9Y9Nh9Rq7dlZqyaWQEYcLwg==","shasum":"1c5321261be8562211bc62d68a032a0ee12588ac","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.12.tgz","fileCount":336,"unpackedSize":2596121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBLTpCRA9TVsSAnZWagAAFy4QAJuLhx+whKO9MVSJ2F1g\ntSAo3uSZxMIzB8AFD5bbDceo4XVayW4/65co3n3+GcZivm9dK+3rMq+XdTiz\nJ24i1KL4ghQS/X7H0SKtKWy8D1VVnpE+96KZMKx3Ff0Eksjzfm6WPEHZdAct\nVJiqePTjOhejO0DyDp2Ct2bYfnk8e2klZyluN+rcY1qaQ5nLQqJ5c/KRHjfy\numh0qFbM3f8sbZXycAHWs7LGiGaK9kDvZXRdTzfglPra+Yxsdy1jVKBsT3+o\nG+54ayWtXgzJc1+gW/CaW9nrKnuoO0m0skOzELE3ZVWUCBCehMERY6zWUvAr\nmKDKpzziMVgN4aLq9mm3JBT3C77rdvmdJhRNMn5jLS9VLXlEIPyt+LetqqOQ\nLiQi9nAZ2C3BMG9TIoWfAuQrmCE2T+hmvKTa27AEF5ZCLIa2ZNPUaxYIzGct\nkEBYBO7IT/AvyPmGJbvTP9cVQBX757GeNAJdEXDQ7alawq0oLia7lvG3OK05\nHvTKETAHDE4fVtB7DQ3eWkqhlJoykmZzxOzVRjB0F8FN6Xw4xLzLrHRBQ1iw\n+b7/zqMge1+PhQITpFA+3ji2I7Ej4c7wXyrVCzXzRaFvkXYc5OOcIr2PALHF\n41E6vMmdX0R5o4aWRPQ2HlC7JJsvwyEstIL9PEHWkD5VUl54hkVcsuA+IvRp\nW1+f\r\n=oJo0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAv7TU5BIZAftyngWTl5nMKINwSibl+bGE/W+zkfSoNwIgdJeaB5e1E669ebzXkgNeHUI84LPjXPDfrmVBq0wPTus="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.12_1594143977081_0.5240223957547869"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.14":{"name":"ipfs","version":"0.47.1-rc.14","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.1-rc.14+5fe9495b","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.6.0","interface-ipfs-core":"^0.137.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"5fe9495b39af06819f5ad3fd8d50604fe7177ca8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.14","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-YUU4jibXua/zyF58grWB0hvdcRF9srzkNQGYM1/qxXvAQlfSoe93tS2epsCiym0LjUtC3W6Yp9K+RvWPdlK6IA==","shasum":"8e5dd489dc998d148454a06926bb40a150bcfdb8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.14.tgz","fileCount":336,"unpackedSize":2596087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBMaMCRA9TVsSAnZWagAAhhAQAJbr8ALNfjtYtMqL9wmc\nhHGwXCKFyuPzZOVDgP7S1WRFcpKkLFFPas85M6WQXvJUOqomhyWxJgE0Eyo1\nfASFrWw21Z+ZsWlGIu3E3vq/epT7pXfSMPjt/frO4dS3kFB8iSgVmCSNGgdU\n5kkkPnhogcAA0cQwyBJYFJ/W29t6uD09nGMmhin21rvv+alG5qGXHQ34/j2w\nsn9KtDxQu7jqsRuzyqGEUeMxYQclhmORCx1Z8VquH66IG27eL7uceoWom1Xe\nh97nkc1qWCd1lUy1l+F2jasTnSll6L2WaZ3tf8wGjg/0iPp7sjwtcF3r0P4w\n5vAGrxyFDbe5/vmVQ49UBUgmGJc4+9cN1YXVS+03EUdUEhFwQ7PYoWdQIyaw\nnQ00zmNQ0TE4+w4Jb/R6aI7/2p7z2EgnNdKagD7tC9ZbzYAkC5YydyW8dQnb\nv3o34blwA/UWxVMidjU3cfKVavBiJvI7Y/5UjJkKTz7OzTddxcvM5p68cKMD\ntj+lnfu4Opqg/pCuRsQLjTJExEvDm2WfPEHzB506QyRCyMI76dVOQVvCrbDy\nMPO+30Vi4UUHNnU8UB3yFZ8p8dGCV64M8M9sn/9iH7z9cSGjAj+rKJWfbsu8\nej7Cs3HCJo3RRBwwOgpGm+2qZwflVcAuZWnhjhr4xvNJtv464ex5SVqnYcDE\n0m+U\r\n=lrE5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUm2ZCURZTsdf1ZVaAxDuyoLfPx3MR/dBSnAijVQUqlAiEA4GfkaZXwuTN/oGGi4ba3GddqLtP5wYtyyBDfZcvSo8I="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.14_1594148491454_0.35449955891078533"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.19":{"name":"ipfs","version":"0.47.1-rc.19","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.0","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.5","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.6.0","interface-ipfs-core":"^0.137.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"281bfe60f079011d0ada783a82d1f030d08a89f2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.19","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-YFfOmuI3Pm/PWBQyzJ1LaOsE+UTfCulj+herAHzpS1/DRDem70IrATvgBBDsqEPzXZOMFJzZHKA23fudlqBOyA==","shasum":"d4b03c1b8ae96043e328af5b98d7c4732b575429","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.19.tgz","fileCount":336,"unpackedSize":2594245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB0BTCRA9TVsSAnZWagAAWusP/R6AgKWpw8LH/iyVxCI1\nyZAAdVND8rijYmsHx3syN9TGBhRaiQPIGgwdUZcuZT0mQ3erhCanAmbLDUM+\nLkQt1K/edbjJxUam4/noFl1G0NWn4es2RrEOJ4wcWjTtGB+oalSNTKzojQ87\nyzU00yV0ipkMsgJGCAvhsBqwkp8jfUgJL2US8gpweV7KQHyHLYVR4TkIhc9X\n7tKtvDxmG1dsayqfI7tj/CvpcehnncUbmh8luJwUYZQHjzKJM3s6aPW7Nk7L\nGmY+cJ671JsE+46oLmHyatu6yzgzzxMIbB5yiiNbv6woDMw3QdMVPCOGMsGp\nxp+t1q1E39Mi4WTsAXHct4HkTiwATogBkYLMBPsjLMq4URS+3lFtyVOoHO9Y\nLidcRKIb9IN8bAPx1FcapArhgD+5M0Y0gTP/v+Zw54xUixxW2NTuU0zm0Nfu\nPqSwrvhzXb9GxCcRLZWzNhV3WmcHr0nzDlzCAZzbSpdU8fikWaxx9Dd8pi4j\nQIDdl95VKSc9oukJXzaZkF5hqb4G4A3NDYlQbc+TnGYo6xYKCvOrml70FP7L\n9jsPsRZYN5kmv1K/bJYjlnKXMGw1Ti5NWJ4DIW1FsOxjaou7Uv3IKHWrDA8W\nwl/XRYafusaWPXmQuDJNoQdfhTnMA1EeUSYAWLQZTPw6A+OVum7w4TWQAgXt\nHNyc\r\n=3KnF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+3LUSQyYWi/NwqmzLQZaMRw26L1EBgqL5ItGwPgJ9zwIgEkTh8UfBy8L2rx6WxRzK4gwTyVNYFtSCVzeoeivq2+g="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.19_1594310738071_0.3434676097105027"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.21":{"name":"ipfs","version":"0.47.1-rc.21","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.6.0","interface-ipfs-core":"^0.137.0","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"3fd2ca8c7bb3a907cc74d48516481fae01d47327","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.21","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-ZefhTC0bMOoMTw3LBclvE0U2qAQ28C/Wl682ezpQDxUsCP+Hi3OrBAcKTank3Wp0xXgejWASHrBlnOcf+8t+Pw==","shasum":"189ed516be0eda509ae95f9f98361a8925adce35","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.21.tgz","fileCount":336,"unpackedSize":2610245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCKutCRA9TVsSAnZWagAAnr0P/iQm2RddeY/Unq+2NmhC\nqibRRyR3HylbHtpotnk8MmBJxSeNakV2kObAtpyFqLQb9Ex7iFQMAuVN09Sv\nAdJUQxcvYK1LbUzofUKIAoKavERqNjdvLK94TycTDU+P3quZXhfk8VBgtvni\nMRUTv8oV8tM63Cq1uoltOBZDvgW1xfiW2nS8pz0eoLO8MkJURl2+G0hoIB/H\nZ+ONjUOtHoOFrwRTucMY4qxL1NYWtfYMTYKxu5XL1BKRSrFFCG/gbBxOTZqX\nt8TzWlXCxFXYV8alrtkSwZ7YNzorQmRp7GoUkKL7C4sH2m5k//gqArU5LEG+\nu0qJeUlxcGf5mcIhkOYCXk6Oq3SPaCNB4VK5pvPQLmPpayv50P6qJ10eHhiJ\niqaLFlSsM9fFu3GSSl++bweb7GRkIYixUGiPLYjfC5B2PmqaK3aHNP/QzGYC\nXDgyi9BaAqpBAcUZOAo21qcpsoMYblw0W6njqLr6vwxwDHxFRaX2ajsK6eLr\nmdoCx0JnxzRZ1y2u1QxvQ27gsZEnh+qb2nnq22LX9uSyhlwpiJkOt++iOVZ4\nzFUo9ZFPZVshTmWWZsZSiYD/nOaampJTWx76blum7x75r2kd9AhWU9wZFpCe\npym7RRggAzb1LAtaGWbdo861gvoscj0Bd0dkoSyQRyR7tvn8j40iLr+0vAYy\nF+tQ\r\n=j+QN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2VDuDWF2xsbU4T92zP2+YxDaDn/m9Uw1FndwvrNag0wIgaxtmYQsfx7w6OUCMsaq+CKaQUuP73J2OYLKhlDTNUjw="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.21_1594403756408_0.7967129275688458"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.47.1-rc.26":{"name":"ipfs","version":"0.47.1-rc.26","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.4","ipfs-http-client":"^44.3.1-rc.26+1760b892","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.137.1-rc.26+1760b892","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"1760b8928dac14b3abcfa4a889042f0d7a956386","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.41?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.47.1-rc.26","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-Yf+H4X+ClaXVFvpSTQdusTECm75DmP5zV6YT9Bx4xaqowwsA7wU2tAq5XxZWImA6SgyutBlb4A2W3QPKC/dorg==","shasum":"f08a562a01586dad08e82e28c6a33a37381dbfd1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.47.1-rc.26.tgz","fileCount":337,"unpackedSize":2612116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEEGcCRA9TVsSAnZWagAA7KIP/1vXL1IzgrdYHCbEeX/5\ni+ZCONqjYrP9M88yFTb0ioW5puMPRQbdXPXxEJ/1tZoYStHG9v/hY+7GtQyF\nQb3gH6+X7mHsOSDJqYI4d/fgrqxPR+VT6Xk3qtfwYUDFHG00hhEBbOHAIDGk\n0+RJlOypSyJ3+IRIjfY4Y1gwPyhmCqa7Oeg1uV4iR0anBiiJhShwHg1NT87m\nve3oT+agxiRcjBREwpR+2ljoRRlYc3zjF4kGGV/2yaXfwRfCKky7IB3CPfPK\n829Vme9A5EdXD3ciFS7vLpNyKFG2GehOnicmxHBY+77wtgM/BJ9k5toY5Sh9\nqISWqas1k+TCRLeDhSXGyaxRBd3CofH/DayKL0S+PQVfFysbd+urGtTqJDFm\nMdFt2niN9EK7c8rt35Nw1B4LCjLmmpm6OoCC1FPjk4OiHMkW9FqIz+4M+rg5\nl1c0WwRj2fnTPPGM8DhiFMFaMK4xf7KHm2IvWNg7ZGfpFljmjJAI4Esr/cC4\nLVSvNnFv2sio0Prv2mCZxBZXD24k1XRo0momRl9S1sddlKYvJNGlxUVfDHXh\nagRaTcSN85KsXgG4ZmP2+QgMA8vE9lxWo7gMrYItCwZ/bOVcen7lAFDZw4UH\n1u9YPhf5AP4T0r1yVohuzz0f25wLjN8VrqbZ0tarRNYENfv/DqRrQOapOv4e\n/aT+\r\n=wsug\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNICcDkSD3o53IYgYuNsjmd0AND5cZWq/HfeMmKoZh7AiEA1Pms9h4TaFmtFqxDWGbxxEufpGVTY5k8SAZjXqIhPFY="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.47.1-rc.26_1594900891662_0.6952210934626128"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.0":{"name":"ipfs","version":"0.48.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"a64939b7dec544b8ea3e52c5f769c1101fc8cec1","_id":"ipfs@0.48.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.0/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-sNz8qFSioV64l9yZyRFwH0rEyhlh0falksyEdRW4lVC5ebCRcNI5rzWvCzPhGw07P8hU+DAYiVz+8SLxUnuS0A==","shasum":"d13d34bcc030d21358d43126d4dfd2da14a6badc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.0.tgz","fileCount":338,"unpackedSize":2620780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEErPCRA9TVsSAnZWagAA2wAQAI/6qDwMS74PL5IKhaow\nyIA/IbnBxRgr5NO9jhYTRLnYLjl+5HGCtCbpQK17VDc2yxu2bMD/QgD3GMgz\nFuOos/aWgp6CzLheGADC4hJx3OP3HAdiv34zWSjvWzbTzw1u5ARxsHwk7zqw\nnhoCTzgdDxxcLRaMwLYAWN9yRTfhH3kjc9TLT04mPDyFuS/VDbVc36OClORJ\nW79zRtOMJtkpNQrrzu602vLBUg8pL6TEN1REwgl/QojNd0GqSKltbm5KdK7h\noFaZXazMA4wRF+f5tieRJj7/CEuXch6OtiCbYQaeFv8FG4yBw+aOTJXCkynj\nlq8YQZQLMzTGnZaWs6WUaScY7L07HKOZhaCs30r6Dr7qyP/BuqO0GjXXb81q\nPGATeMjmkvWjonQNhC//GFNWUrN/K2nJ0Rd+MSiNFMTNq5z8TaUPX65j34Hq\ndpUIZ1RynOA2qo4/UAHdyR4XVhEZc8cb3fTopil1mtLgcQfJUfeXG7jU2kPi\nqYqr/Tr3+17PG4oU6y7SteJ+T5HQgAkw0LjPgpikbPk4ic03iKPyPMDWsyBr\nkjfev17dr3gcTX++Umn4UD/Br4LZKUADTkXy0FL+IA8cQfVctbR9XxnXPxxN\nIL9IyWzxuuQnkPtFMuZSHYA2LEinQSSATQ7+aJLquHkpCn8A7DJiO5+oLvyw\nioGc\r\n=yMik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHzGAEiqr9i/gVQG5WmMJnS74gzzk/gGnvgJKbiYocQHAiBInUYXOdJmSRZF1xm1v4U2x77C9MnAyV/LblKuHgHpWQ=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.0_1594903246380_0.8506471841098668"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.1-rc.2":{"name":"ipfs","version":"0.48.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"4565a3e53b05beb8d2447667f2dad6e7978b419b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.48.1-rc.2","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-u38xSE8WSqgsc300+1eVx05Swkqe+XquBFrO2ubU5W0K1qyM7aVt6xfTXFq8sVApb/qgRln0yuwEOMxHGQZ7sg==","shasum":"804745650d374c9d37e72f63c02e303302caab85","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.1-rc.2.tgz","fileCount":337,"unpackedSize":2614648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEanJCRA9TVsSAnZWagAA79cP/2rjnFxT4armIfGVF5in\nfsXB8037/UgJPf28cXl4s+SFgF6durH/L4qYa3s1XFw7XdlmMiGY9CHwaA5f\nDQNfj929MG5R9PhGwq664yMgB8mO4+X8c57/u9GivRsI9v451DeTSDrQ3LxS\ngylNZTOepqcYZl3PrKimp4gC61ZqkvErLDRBBzq/Zr9+tsWlY580dQgov6QQ\ns+HR24m8RaBMcCp4/w9asT+9JABrObJUCsnucgkxlxiUu5RRdyW36bJlBhls\nr13TqoNCd6x7X9VN8DD1Arvc04TnNAaqKPV6dSX1Tny4U3wHy5IHkZZvW6Ib\nDARuANr2O5H3xtLP1RuPywxMG2Ly0KFeKVjQqoJ6hjRWFJ7Vph2tMzHZPm3A\njUQ73Ahs/RZ8G7o9LLiIepD7ZGvmPAjpu3yA8sxwYpcsbE3JugNTkSLmO7iT\n7U4ctZqv4hkDQSlYn/eLgjPSKOE+YwKpfTmWLrfg3Rp8VGE1+IDBta452XRY\nzrJ4+w+z3ZmfeXeMb2bdJzFMNKbIzb1DetHwMOpiphjtmxWwq5BOd9Tx0ywp\nPk56Q/zf3FOT0qHyg/bC+awxXR3KynweeZ4BgiuOIkta9XMd4KPWnG2mOhNU\nDWzNYQBAQ48q3djN7uVCS9aHc0WFOcdFX6g4QbHSI2ilqO1lEsOFMzAiVfP8\nR46B\r\n=Tng2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkkKMj76N3zq+deqscBVdr520Rms1m2FeBPnIdTU6IHAiAgOQMvbry3uqWfzQiUElQNrmqImVkMNh2QE1KnXoe8VA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.1-rc.2_1594993097342_0.3775015816523326"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.1-rc.5":{"name":"ipfs","version":"0.48.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"9fdbde80e976063ab56410a4d8af1ba955e32307","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.48.1-rc.5","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-yQL+HvmnVOavQ2LSqnhaq4XPEt4SVZCsawJdCabo25Xja5ZbQJ/lL6gWFW+1XeFLxrrOIy0zPA/e/QWQrsUX3g==","shasum":"3f349c37369e5033a109611a3a943d026313f6dd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.1-rc.5.tgz","fileCount":337,"unpackedSize":2611138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFr1vCRA9TVsSAnZWagAAFXEP/2W2BMhngFn5GkVByZzd\ng7TDIgVWQBRWfgokGjnEkVkvyfVOigIfaNy4Mv9e4FGkFDtNgqG1f9+TElAF\nCTPUWY9f62hSzu9qhK8t4P6NtVuDkGwq+dpAPMwKEE88kvzfhW6EqOtJKvVl\n6rcaogpuwNbNwuIoH8G85csaoRcgpcCGONrnlDInCs/gtW8667ChxlYnhnzg\nL7VOrXz4W5qoXEqKpM3gRwd2IscR7yXItycNRCwDuAnZG98VgGBvjtsNMGZB\nbSh1y2gt6zU1rwvgAkHaM9M3c/rAzDYx6shdJh1r/nK3i4ZcM7pl5IaO/F3Y\n26Q633caE31JCBryGBP81DUw4/uMw1o8KTNDkk2pDD5Jt1VG+hyggnYpG2/v\nZ0xEF2JaHktoHV3F3TiR3UXTWTPQDfP7kswzmalc9prqjVn6UwedwpZLI6+j\n5OmkKhvnY/thIdtmw7/VaGvM4uqCkBjzItDJ/8+KgQNUhghzeRRdOIUB1NDs\nuCZ3oxUCi2EH5dwNnuomkbq2Xq3IIHwUDgPSDcuXBVsneQFwbHyqpDQAM7ZG\n9Djj8uY4X3oW5wXlJj9JOa3SC3Vwux92hWUWBGr5omyWFLOTUton8WmseR3q\nPDuBNEhnG51T3esvxyEalijn5484O42gyRqDRlKRIKU9QA+/IvDEZWeN0abs\nlE4n\r\n=FwBs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBpLmPSv9V6JT3Y40FTedBsHgSicnl8V0sQCtm7OwXEQAiEA0mOw3OojKNSFja6Sdpvq9D4HJZejxmGEUScvGAY2qeQ="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.1-rc.5_1595325806665_0.9861114164106295"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.1":{"name":"ipfs","version":"0.48.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"93adb1f6efeb033693a47d3f8f654cfcd7a717b4","_id":"ipfs@0.48.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.0/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-olvmy0xQ2SFB1dd1CI/legZrzVSgU3avd7PFJG7f7d2KpKFjjwUAjBR9ucDxLqqSmUNhgcBZbfuwoY9R8MhFEw==","shasum":"606fb6d68b8eda35134ed16ea5df1d6c8154e96c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.1.tgz","fileCount":338,"unpackedSize":2617601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFsBGCRA9TVsSAnZWagAALssP/2TR6J4I4Ng6LJXd0UxS\no7+awdnLtAQG64Z5m4JQgfSwFtOVL22IVrsSX8VElJXKbM6QPhA/J0dsAZwg\nesB2wl16hLSQ4iV+zOycUqF75GSTv/1IpryIHYmD9GuYSuGlnAYxFdHmd2g+\n50RigHLKaq7q3cd7bCRCd1b3qKPUQI4U+a6LxVdpJW+3N0ub1XOi7Wl8EsVb\nytVhHSszVsOUQrisp2IO/eY5ybr7VKMqPWZ/BXzloXq19PubhTD7dKc5riu3\nUDSXbi/p+VGVVo4pmaW3drdrSdjB+ixjTQbwFUCJ8ONtinAuKs8El9KtOxuC\n4gN4CE7f3qsIFM7twnaYgVsWqOJZtAxjI+Rs2ntz8TciOfWoEtv8YiyUrh5J\nVnKssvbpN308sAf4aYMHcflaVfB4VvpQvMjRVvPDUYU6UFf0jRYAhJEwTUN/\nfJfNLd4KKWT8Ee35VRqjOTvaMb7XxVngvpWVMPOPupc3MsFhMKD8VUSCbx/D\nUNBwxyulrnjsuV1FCQG9DAXYpAQLPs74NDlusipuBupjXu4jPN0r+xzCpUBZ\nhOAxqMpbsHbOD1kEZ7YH+urGw59M/kP2PJmSzuI8li5Xu2Eolv+fGBiegPVJ\nLuxNAkNSXcj8PN9XzaZfyt8cvqSLZRpHlCUmQNlJAazEqqaaU19GkzKrf3sH\npXpf\r\n=6qfI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCubfLn/YfcGBCYHqUwH8snEcP58/rZfrA9GYcSRtB7ywIhAOfePzs+7KON6GQ8tkcXSWdXOZl0wrHxDC46tX2EVwP0"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.1_1595326534160_0.2522036944903665"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.2-rc.0":{"name":"ipfs","version":"0.48.2-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"8f5a19ff08023e22fb3c4ab9dcac1e7baa097d09","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.48.2-rc.0","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-MclR7iQwNpnxXRhTISMSyy6leAeRQnqx2vKObr2QFS+saBAHVo0UCrjmcm4HxNuCqyhA5Exzd5ULAXMTHU04rw==","shasum":"8c34b4a05431e7c458ab4584998acb1de3cf21c4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.2-rc.0.tgz","fileCount":337,"unpackedSize":2611864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFu4VCRA9TVsSAnZWagAAA2YP/AhG94hyHwJE4UwHUYEm\npYy7i4mM7Na/xDTKbOrAxt5sfu2RH+tju3ukIIb363ulkM5ZxxRE306qSa2L\nJZeZGHlW4wvYLTh27zBl/LKfRN/sMSZTWHmO99ulLoFbFDufowAxOxJ1b5Qw\n+KWSZI8WKWXQboTgT8yrLg3IHjN7Ig0FWeUHd6rFwHpLiSBILfvaXLkp/8B6\nkIC3ZKgYM0LKn3x7MOkM/G8NC+95QfCQqeZf6IAn+4VXQBd2gSxLPeqU2Yja\njbwO+Xb1VjMyw1RDiXIVlwDHV/uVDF4tM6HPrV1OzjWluWhELfnRN7e6SH0V\nC/KF+mEm1QdOjTKTjzIVHiYNx5FjQ+CyvsZQq01NktL8LVHGiCE/bjUIZdxr\n7exvBxLvm+JYVBFtoRi9rxL6jOB6bYWx7RnJSjXg/lBOVCUCGaAZMcj+iGCR\niwWOiIO5WVo13mAMNCes/+6xIn2Ukp35QqZeFlaqxRODVF7CMb6EZ8AJslUi\nsyHadqzkMV6d/rxEivGRPCsoVVY3abRD9J5B8WEUWJHoTlZEZzwiZFOBFOyi\njvtTYvrelISS45YZnVDOx6B5/axx7QbhcGOpx0pYjhZ6Xb91XB5PqtZHPYN4\nY9s+ZtJ0/A4wvsiXfvo3D9aEb6NsSA6E0j/cVGqAE5uGVataDuyh4QMFhA3c\nA4of\r\n=qCnn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGqXz8S7LBMEQZziRcC+mNHZe4iZwyc6tAfayyd2RC+zAiEAghvbQSTqIPuliPFvRQgCmNvGXa72A+xpwqKwPu6b4X4="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.2-rc.0_1595338253674_0.4877668928274743"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.2-rc.1":{"name":"ipfs","version":"0.48.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"6a498e92c00a784867053cddf9dcf4c1f510cf55","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.48.2-rc.1","_nodeVersion":"12.18.2","_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (linux)","dist":{"integrity":"sha512-+wLV0XqwKvsOF4KDpjwCyAQ3z39dmXP+VImzkEPM7V5YYLV8liIEQ3yOsRZHv782QUbkM0QVS+bfYCg8FswnUQ==","shasum":"4c90a04808408a1f570936444ec9b69e21f6567e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.2-rc.1.tgz","fileCount":337,"unpackedSize":2611864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFyS8CRA9TVsSAnZWagAAwcUP/1/sLtFpWda3qaoU7Gcc\n+jj8+ojIRm5/nTnnNHbjbH3oyWZdblSCmyxQ8+0kxxj1+ayoCUDuBe2s7Uri\nAHrPRUjQVRs844YtVZIsZF0LcyOfG0EcOV2gL2AThV06kpj3GpkTPJE67g/L\nz1fnTaYTOVbw/jA/5i7KVfYIZFXW6E0DZtIgyVCNCCbjMc/co3/0UzLVxMZ0\nQjUMkWjY2yxeDyLo14tFkmHAKf38NpCy3N6OnxlC4gUFGMba1sGma/y+xGfH\nJO5bnAE95tKGku5bDhJRvtHrPIuAj1v/Hp5lmglTErVqZFh3B6s3011XVIKP\nMFrv0GHvYm5sN3FSKRD8rwKcs4Qpp8mCr+Oz3X6vTkvlsvdfdP+i+cHMdN4x\nxpb81xlqR0qf1iv+Y8FM6+d2RAKO5Tr8NLgxQBT7yhNWURbz18UCwFXfZu95\nRLdWbSCRVZaOSH8+xcHOQCBFA3cWKNW2Q/iNFRCgdiN7plxnlXSw27PPiucq\nkAiR/F3XLbWG7DiQ0P9gLRyYQ5LE9Y6UfkI/jvh55bcTA+ICd2LRcdRXc96b\nel0yvX0Mh9K76etiX4XE7OZIE0Q776UQyt46L5XMLMhXrCPK2z8jCCeDvALE\nun/DD5Je4ZsRVou2Xg0JEBN7sKW7WEb0nxg8Uva2svceOkLxCIWk+x8w1PKL\nFUTB\r\n=46qs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCw8x49eMEF2D5r+FLDt109LWMavLub9sdIYj6F/0HZywIhAOuHsSBHtR5RkzxsPOEbDVxJuc/PqlDvd5rzTHQ/M1ff"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.2-rc.1_1595352252040_0.4997834084024235"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.2-rc.2":{"name":"ipfs","version":"0.48.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.1-rc.11+6b244634","ipfs-http-client":"^45.0.1-rc.11+6b244634","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"6b24463431497bd13b579a730ad7063345729ad9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.48.2-rc.2","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-5caj7s1krWcS9soU3IjRG2t5b/DhchsWMuLPg/Mb5fMFeMv1YxXKBiM+APBZfgJ41vuvlBljGNdhwCLm990YCg==","shasum":"245eef16cb4093b48bb4f49d3cf76a1c06e76215","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.2-rc.2.tgz","fileCount":337,"unpackedSize":2614365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGV3zCRA9TVsSAnZWagAAKn0P/3EP+IXN3S6pTO6xsCpY\ngNIJkcaqxvQ4IibaC4EM5TEOGkzYU/fR0tFVW8wTDHxjYdRiiwMp/+LLKGD7\nfn26kaDsG/Y++v9o4rRrK12+8Ajw4xBKddAtdFSlDfsP8KMEEM8N7dFauQ4m\nEbI4PdJSbEDurC1rulQ/Ogq5n7oL4zYbu8qefKyAtL0HKDtE2i9ShyGHE7Ul\nV/1W0waeAz3woY2tscLUt9azerxz0cq5Iqe/cMMfvNMouWJKpz99VWaWKNhA\n2PtwcF6uY2cM6GdISTE1LJUv86Kr8l+BOTtKFgfj0aDO27FADQszIKtB/uFw\nzwLg00HfMeR2mHnWd1ktUatR2ekK6tDUq5HzGEOd7nLKQgzVuZBYXmKjCsWx\n3n5vqV4TJGJwyuYE7q7cyjD1iWMFDr6N/qauA6KESkPBkz/1k6kFr/pM2Uad\nMsLG+z3p3s8KGq2kq2XhRgnDVAdzItEufoYG4x350YU1cVnFa3fh+dEji6+q\nO9TSH03xcPditkIyydOTy4L0U3zpV+Ax1QO8qQminuxeJmhMT30YmexXiodp\nq7V3X+GZxI6h3WBoRV7SsQE3nv6U3LNwWEzo0l3n4F4jAotN5eHWFyryjJSh\nzvepcVjfJrDLQ+KI91ES3/fNyS/K/1pg+w3sMD6ediH1Dg7V1chko5eLZAVY\nE3fj\r\n=rQuO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRpfvTUAjE+8z9UsXSBLbhjSg7Fi3OwLeCBCxy6vbbOgIgR0f0cjZzR2WZk56guGMy137L85RcoRAItyqLmSPXqA8="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.2-rc.2_1595497970997_0.6686752466339234"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.2-rc.3":{"name":"ipfs","version":"0.48.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"19b81130a7311744cdd6b5bc2170d3939aeae1b6","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.48.2-rc.3","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-VP7cOH8XsvBENXqlBstSGJywFBqzJDM7fjfzUPROLESRNjpmQDPAIElfue7+gAgOmJGZbcs7NCqu4z21c9SH0Q==","shasum":"009cae7f46b783d214719441916012b97f4f6136","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.2-rc.3.tgz","fileCount":337,"unpackedSize":2614335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGcGhCRA9TVsSAnZWagAAuMoP/RdBOaUOoaShjIkrBiZe\nFW11embyYzT3f01nVDzGpgE70b7XX7L+2AakbhmY0AGS5gjnsHZclxi2dhTp\naFEXs1rOdJYMf+tyQAQLPx1C1KVrlWiiPM/3Db4TZi/Cb9P/Kh63nRcSyG1D\nfLPv7v0fcEPca/tvwq53+CFQ0vBwK3202VDdm/Ransg8l7I495ShL1HWD/0K\nHOr15ab2s47oR/H1BaUyd9cWYGRhqd0rk1jodwTtj88y9ORsw7YF/qIcsVfY\n8H+nKu2PnWvICi3GiLvHt7x+qBCjSYSrKYhWuDAA2y9uhWZtTT4a5cdwedWz\nBIMyMnKO2akeHqjZPLxfAxnKIv2s6Crbhg32/j+TSA6ytJKfULuuWbATjmfd\nidFGutXnTwFTjoUpUJOkPaqvGxsT31gvp+BMUQeqkBhCKnhXCgDZFcJwkclC\nQIJgpwB8+qCqoXIL8+qjzITTGztbilmpjnja3v8+uTdt3zuPk7xRw4aA2Hf9\nLsqWUg0+vpgX9aCTehU2npxC7xF/Nkl26OB+jy/k6i0TZ9S2qm2dAOVN76P6\nXPRZfo8mBxIVz1nVoPA6UWj0Vgr9pP8hgQZwVeCq9T30OsdI90GuFV1X6Run\npIax5NiFqqQtRZV9HlIrGS2Cw6613Jc/CDztj/eGbYGAyb4uooVmjZ5VIMhi\nyuDV\r\n=dzf2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDweIUUCmC8T4zsRUKOA7JomcRgh2RttQAJ3bFLa3YzmQIhAKkj5lEeapDf9MBht5fPktTIgOjkbZCTtnI4wMntTEAH"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.2-rc.3_1595523489046_0.11897188712749673"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.48.2":{"name":"ipfs","version":"0.48.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.0","ipfs-http-client":"^45.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.5","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.8","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.138.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"0425c84bbfb6af75e2dbf5db444ced577f728d23","_id":"ipfs@0.48.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-lBOI4BgdH8YEwhuuM0dWBu2HHdWDF+gEthalDf0xeYlW+AwtqZI0g80a1QyXgdDKfNcm3TYcHnZJfN1ssx0fEA==","shasum":"c821b051190ad4c6ff6ee726edfd7c76b057f902","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.48.2.tgz","fileCount":337,"unpackedSize":2498169,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLA0mCRA9TVsSAnZWagAAr8cP/AwmIaU6PqJOIOmUFta1\nYEdK96u+floHkqXIjMTPv04GJ7reS7k1meAq4e+48D6zDoLwnjjUlrP+nUqm\nPiuk1QDVOv2s8M2B/VxpL11Xx5mPP8MmLlDYuxHQIuSFSq697FBEEloj7YRQ\nuAdAYNInNB1BtWWU/zWojIj1OKSmowVCeFh1pRSm/oJ6NPrm5fJ+FCb+sSAY\nk97q54enIts8VpcbAl5AMSqj+hwhWLqb2P5Y9gsies/uAOz9B2qC2iEJ+PBg\nrtP9An9viMfw/x39glrG6l7zW5HYnRb23qHfjj8ZXXhJF/CWN3CVxuinmBhE\nexoaERj1Y8UTmu8hWU7QJ8gQbfnjAXQy+E0J8r2VpedGG6yJuUg9VkLabLTn\n/O4Syldz6GlVjOnoNBInTfem3YpXO+QrDMF/y57N5EmBHTp+bwqbrjJRx2zX\nWsxc4uumtIYeRsU1uUT28p2tW8HO35sYClHXFHcvOTIKwZc9BR7iceGjThv2\nq746B1JuKSwcEsC2YqOAHnTngGUQUOetAr2MfrdgiyfvmMeJjSWxB2kfE6sU\nhcxiiMy2M+RmJ6mS8Vvg5XBx4qBQ3I1ccD4BmEwYuSSv2x4yLuW3QLoiL68g\nrsZg7e4kqmO4izb/8RY1nWpguU2vDxNoepmEGu5ytu5GFu/JIGJgyrdATBQu\nqwiN\r\n=uAz3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrqy1M5X/KC3f9zzLlCgVZrw2gVPIqWvelOSZtDSKSaAiEA08NuQ7wMXFP8XCFGWgK2sxMHKZtqaLPCADkZeqr1wlw="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.48.2_1596722470390_0.7379048262685743"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.46.1":{"name":"ipfs","version":"0.46.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.0","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-level":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^1.0.0","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.2.3","ipfs-http-client":"^44.2.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^3.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.1","ipld-dag-cbor":"^0.15.2","ipld-dag-pb":"^0.18.5","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^4.0.1","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-glob":"0.0.7","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.27.7","libp2p-bootstrap":"^0.10.3","libp2p-crypto":"^0.17.6","libp2p-delegated-content-routing":"^0.4.4","libp2p-delegated-peer-routing":"^0.4.2","libp2p-floodsub":"^0.20.4","libp2p-gossipsub":"^0.3.1","libp2p-kad-dht":"^0.18.7","libp2p-keychain":"^0.6.0","libp2p-mdns":"^0.13.1","libp2p-mplex":"^0.9.3","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.2","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.17.10","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^0.7.0","multicodec":"^1.0.0","multihashes":"^0.4.19","multihashing-async":"^0.8.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.1.2","peer-id":"^0.13.12","peer-info":"^0.17.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.0","semver":"^7.3.2","stream-to-it":"^0.2.0","streaming-iterables":"^4.1.1","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^22.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","execa":"^4.0.0","form-data":"^3.0.0","go-ipfs-dep":"^0.5.1","interface-ipfs-core":"^0.136.1","ipfs-interop":"^1.0.4","ipfsd-ctl":"^4.1.1","iso-random-stream":"^1.1.1","it-first":"^1.0.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^2.2.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"7aaf57e738a702565160f78e81bc8cab99b9f2e6","_id":"ipfs@0.46.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-caNCZC567VBKnmUcpq8TJMWkcxtApo77SXc0iLAmn/QTMbr+bPkVtMARazE+PtPZVCOmEWYcAFUx2wIR9LDw7A==","shasum":"f1a84bf8d8652a978cee71ec81d3e1b313eada03","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.46.1.tgz","fileCount":335,"unpackedSize":2609813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM7zRCRA9TVsSAnZWagAA3UQQAJySwMyf4yMF1StRK5Jm\npI0HWnA0nEHgFRTlYaiAoACeSKKlw1eoZJTxlvQyNyoPwF71UPVn5/Ml1ume\n+FhW5e1R5K1b+4dY8l2iz82oMreGB3lyWhqy2Hd6CbnOZ0O53OGmdgZzurch\n7umdJXhxdcLdWaF8mtF1UiGTi0CKe/xOytrtrLj+zajdYtC3vN71Z68T8kyf\ne6PcTIy6wgcl17Tv4lLPoEZRw7YU0PyH5BvvYEBQlrVwaEsa3sOEfnu+KQ9k\nTY/Ifmypcgf1fEUD9x/LHGKJA0KgQn8f2SoQP9oUP+kfh205YnIqWmLbjggP\nXnW0yWNGR5ZgJHTwHB2n3yUTiC4BSW7DiesAPVYul8ZaOfn/IKexkIwHjNrp\nJsL1QLqNwN8DbB7wxnTcBGEB2ExIsVcds+cMQvId7Sp+FzUUz/oxI/bHH6bJ\n1vpOyGkpl2yB3SNIAAjbBGg3xerMOIVkFeL6Hdo3NtMxSocev38B4yaUG/kz\neaBCyg3gO/k8ndoTT6t1SRE1kMARrN7E2lHKJYymk+ql5RE6DfQ9vl3C5Exm\nA0VDDsaxI8rH3r+lErRWyGqEB98ntL5RrTwKnmk5Gh5R3yGuPHJkAJZ7OK9W\n8S6eeicb0cONNRC7stVr5yQER7ILAPEYpu5fl56qWRy05Qqo/hsKElTu943K\nXI1u\r\n=qLwj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF92FKQPSh40asonQD1oH2Rmu9jBpRpUTUodE1iLZxZCAiEAm296vPgcX9w3rEKu/vVQPlvLvpJXZ3ywOCw6Cn9qfOo="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.46.1_1597226192546_0.3356561032556149"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.0":{"name":"ipfs","version":"0.49.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.1","ipfs-http-client":"^46.0.0","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^2.2.2","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.2","ipld-dag-cbor":"^0.16.0","ipld-dag-pb":"^0.19.0","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.10","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.9","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.1","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.0","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"e7396bc883ad5a6620e2f7bc32e7baf4e636e230","_id":"ipfs@0.49.0","_nodeVersion":"12.16.1","_npmVersion":"6.14.1","dist":{"integrity":"sha512-v1NpOoHDWmsRFaic2oYWAT/m7QnoF9GaPFT07u47g6rnYujp2IW5U8pQKVVAMgdyGsWpWALHuMJ13WBUZMfYYg==","shasum":"c7d44315e998a6e33bc68d4dc73db86c9d5b7bfc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.0.tgz","fileCount":337,"unpackedSize":2487994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM8KZCRA9TVsSAnZWagAAs00P/j03k8Om6CcA5o+BjL76\n+Apr5bUHbEv72ThW4p3gYIH8Zk57i+quvttXiY5ttP21QI6mc1pQa8LiYB15\n8xeEo7vU1HRoGsyhPOTzj5hjmZP8EjO2He7EfUMF2KtNr9RLpKe50Olr95/Z\n/wawgILbnZayK62mY4LNgDpk/fEb4kxS3v2JDZ93bTKLUS2ZxMCU1GzkG3Ff\nRKLZzjW3WZRtFWQPmBgNj9P1/3nPetSVsA82aQx6e7HZQiqrryyhq1zRmUCn\nK25pO/rdDbX4NYP/9DiWiT4RfOl70EMgRzpHO65A4Lc7GO41OOgbZ2YsD/Qi\nnTabZM7he2Lu4MxV4MtaZ3olMbG3NYPoNEr17WFtB/QWwlq5rPLkfqq/DH4u\nwWGQws8LwmG+gfEU+v4ZCoaoGQbo/5Q6QVfjMxymS5gp0wySX+aFszzBJOuR\nFX5qSj/pDKI28rqhSJtID1QEBBAKrBvYQN54uAyprSBbvAlVn+Wg0gZ9Duiz\ngylFEmVMznM7Qj3Uq6FjAqqOFZxTioUl8r3qIDxxMVmMzoPvmFnXUsh1xof+\nDowR0yfUaFT361oCs0g7i2BkESObItBJm053Kqi35iGjlmzJsFfnrEa4mr+S\nrj99by31ZGuzvX4YOgz0VCzpnuP+V/93hH1+eJTYbrnwcEb/5RVdjCVqIptt\n0QYq\r\n=/tVR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHD+JUoLXHEUeFpi4/6hYwlY5/8bMXNZh0N1Oyc5BeOgIgerbV0ASilIKugQYo/U7Y7qapQL1AMGUJD2C6YAl5uvw="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.0_1597227673268_0.5507615224117304"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.1-rc.2":{"name":"ipfs","version":"0.49.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.2-rc.2+5cc0e086","ipfs-http-client":"^46.0.1-rc.2+5cc0e086","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^3.0.0","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.2","ipld-dag-cbor":"^0.16.0","ipld-dag-pb":"^0.19.0","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.10","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.9","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.1","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.1-rc.2+5cc0e086","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"5cc0e086b036e7ba40b09768b67b7067adca43c1","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.49.1-rc.2","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-ffuaTn0IF6Fa95U43qEWZGPm1bByqy3a8GDcEpjaAwvnHomXlbxq0Qc4TquI18Y1pnD7drGfHQNXbXjM9knWcQ==","shasum":"4ca4064e0b932f07fe17298aa49b1d2183ed39fe","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.1-rc.2.tgz","fileCount":337,"unpackedSize":2487471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO/s+CRA9TVsSAnZWagAAJvsP/Avz9prvQZFgVlRhCoRx\ndmEy2N184Vwd0noMpQm0ms6/i5LF3oT9eRFGEOH0XFbb1X60esprb0v9ruuz\nWNfS8rBR6KjCSy/8sbzd4k63QJl7Cmd7tsNrwk//P1fl7en7iMK5OYb7VDUq\nqvFNYIwf5VPv/PtDSf8NJQmWOkAfkZRxwIedEpqAQEuL35lLtY0g/2IIyP4l\nqVs8EulCkd6j1G4hTD1BbsDc0gw83fixdnUyAw0757qNv7XrBHfk45oDwA0c\nvZRGuM6AeucBuALMtpPA1cjj5AKOmZJvaHrkaUORoRm5DPPbjCn9BbPYZ0D1\ngmwk1V2fjHBRl+QAwcnPVwuD8uvJt2RVmOSC+HA0qUBQKt3x7n5kfrmPcpXj\niTbKvI/aLxNftSrX5jOoZnMJWvQn6y8cJ1Ez/Omtra7JBcupcaibdK/AIkLB\nGUTAmqXkfI3UxLxIIjKz1ZALwhl9wiYrWsOmGpJjjxcOzrONN8s5dLuD9tVT\naDH5AUOtIx6tDtLPTR9GBBGVVKbO8MmRhrjvPGAW1TDtmaBAw0++rJqBJDrh\ntBafqT1lOXP4pZBehL9aBVkHYtU0xZH/zRB25tE7qYRjvQwQOkH3UDgg+65b\ndl4z2K/COUqhWT30t5R+PefO4/DNHpLJP/QSGoiuA+vEAH31GKhHCo4cuEfb\n8kL6\r\n=zpPi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1FDYtuVduFMB8dTbJqBjFBueWw34DbO9eQh9pSOMngQIhAJJLkLqhQVOHIjal2qFoff/O4Zz6N5v6XdBqSfG0XY5u"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.1-rc.2_1597766462225_0.9053961869473532"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.1":{"name":"ipfs","version":"0.49.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","bs58":"^4.0.1","buffer":"^5.6.0","byteman":"^1.3.5","cid-tool":"^0.4.0","cids":"^0.8.3","class-is":"^1.1.0","dag-cbor-links":"^1.3.3","datastore-core":"^1.1.0","datastore-pubsub":"^0.3.2","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^1.0.2","ipfs-bitswap":"^2.0.1","ipfs-block-service":"^0.17.1","ipfs-core-utils":"^0.3.2","ipfs-http-client":"^46.0.1","ipfs-http-response":"^0.5.0","ipfs-repo":"^4.0.0","ipfs-unixfs":"^1.0.3","ipfs-unixfs-exporter":"^2.0.2","ipfs-unixfs-importer":"^2.0.2","ipfs-utils":"^3.0.0","ipld":"^0.26.2","ipld-bitcoin":"^0.3.0","ipld-block":"^0.9.2","ipld-dag-cbor":"^0.16.0","ipld-dag-pb":"^0.19.0","ipld-ethereum":"^4.0.0","ipld-git":"^0.5.0","ipld-raw":"^5.0.0","ipld-zcash":"^0.4.0","ipns":"^0.7.1","is-domain-name":"^1.0.1","is-ipfs":"^1.0.3","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.0","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.28.10","libp2p-bootstrap":"^0.11.0","libp2p-crypto":"^0.17.9","libp2p-delegated-content-routing":"^0.5.0","libp2p-delegated-peer-routing":"^0.5.0","libp2p-floodsub":"^0.21.0","libp2p-gossipsub":"^0.4.0","libp2p-kad-dht":"^0.19.9","libp2p-mdns":"^0.14.1","libp2p-mplex":"^0.9.5","libp2p-noise":"^1.1.1","libp2p-record":"^0.7.3","libp2p-secio":"^0.12.6","libp2p-tcp":"^0.14.5","libp2p-webrtc-star":"^0.18.0","libp2p-websockets":"^0.13.3","mafmt":"^7.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^7.4.3","multiaddr-to-uri":"^5.1.0","multibase":"^1.0.1","multicodec":"^1.0.0","multihashing-async":"^1.0.0","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.13.12","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^1.2.1","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^3.0.2","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^23.0.0","base64url":"^3.0.1","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.1","ipfs-interop":"^2.0.0","ipfsd-ctl":"^5.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"84cfa553ffc717d5d8bf94fdf6a306f182c9aee4","_id":"ipfs@0.49.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-pVTs9/IXrW/nQ4loj8uOsEOLcRvdgp9vRotw0g+ZGEUVMKgRLTvSacvY6ZBALThn6LtrZRJcFRXkpdvLCB6Utg==","shasum":"3b26a796726e521d641000023d671cba83813e5a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.1.tgz","fileCount":337,"unpackedSize":2487753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ/GwCRA9TVsSAnZWagAACpYQAJZLtJ8gxUvJZsgXzB8A\ng1lME67nOKSsNArivMxoPR0uJj2LCCgEthRhA8wYcauBrpfb7tcy2jcdCHeh\nVD/xmGLBiNumm/z5i78K0jtn62a/RcCcsDTJTuvQpqa3weeD8Pj6jyjLjDHT\nTSazOiWGwy224oDb8kE30zJOz7H2kOhQ0GooRGmyv790XDOkbAB+QHjyOYzA\n3M43pbo6LT5xNuOawC6a6LrDUGyFVaqXz6rUnUnRRy4dsFSH5gMj0wf2yTZB\nVm7tV1mpwSRmcmtNLHrlsGnN3DN2I2BobHbS0KS2AsA7myI5f0TNo5s7XN7S\n4EffL2JTSMfYbkh2E8KymdKDfxU9L46/6IR6OzgPwU2O7Soew+tR5VeqOWcd\nKiTPTyE9uXUmm6Hf67P8duQT6WZm5SUbQ9xJCV8k/kwz99ZQ3EjFMxOWl7e9\niup9uslKtXoPgJ3+n2rg7AAxcAuJmXd8z1hkYWOiYmMu1Ug733nVKObKTvGm\nF9VQdtf5NuskfENMPpi+3qOl6ZLsIas1ryUniz0yTcNZZ1R18tGsjFKAg2SA\nnAHIRYHv8jNJufC8iVz7UFxwkk+6qFpkTX8Pm6qXqZrTrPVotYGlv8IMLWUQ\nIzmqreDqKaGLTxG7VO5qLAHTXuB2OW5DRMS+13ZKHPo84g2837KJ5ZLm8oTj\nNQDU\r\n=YfWZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxZWLzj0r3sFvtfVHKtWsS6Ty/WvPpaRoqpolzkdEEbwIgXr8AmgX9e+tfGvKGUXzS/BwosCPYBcqMC1FdUcxpMLs="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.1_1598288304167_0.45316358670915413"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.2-rc.0":{"name":"ipfs","version":"0.49.2-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^3.1.2","@hapi/boom":"^7.4.3","@hapi/content":"^4.1.0","@hapi/hapi":"^18.4.0","@hapi/joi":"^15.1.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^6.1.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.3.3-rc.0+64b7fe41","ipfs-http-client":"^46.0.2-rc.0+64b7fe41","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"github:libp2p/js-libp2p#0.29.x","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.6.0","libp2p-delegated-peer-routing":"^0.6.0","libp2p-floodsub":"^0.22.0","libp2p-gossipsub":"^0.5.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.19.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.2-rc.0+64b7fe41","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^6.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"64b7fe41738cbe96d5a9075f0c01156c6f889c40","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.49.2-rc.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-OdYAseFSqSgb2fDyPEPqF67GUQQJYLLuKID+U9aGKl9K8RrMmY/QRma6Z5XGxGiaL1KC87ZSFvlIqHOMBJ7owQ==","shasum":"0ef1cfea4c8535ac8df9043fbaee49cb69e74ebe","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.2-rc.0.tgz","fileCount":337,"unpackedSize":2435492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRLngCRA9TVsSAnZWagAAwbkP/2t9Tq91xaRrtQtdybSq\nuxkWNGd6UVSVfNHqaLzfeC+CWMDIvpGGH45pYLVqtr3nSIIDzKsSHo6OfjAP\no65XRG9KkJG+DnAXynnXMKCjZxNbc6ufTo/O2b2Jue4mQKqvGTvH/S0rGHyw\nKdP8GVpHJ9wHTpcmqyYGnL6poCO2f1T6Sml/BJ2TTL52GouFY8NaMaji1DUr\naknryYnwLC0WkGmDxtL6ma/pki/mHOqzIybMa1j7Lh+HbqPVPz9bP1ihLLjd\nPvY15aYwo6f+aK5ggxfntFuYIh21ME8PdGZEWPLxtGvJsb6O6u5j8JxL14Tm\njDO3Pq9H6mU6I3SJP35OwKyy30R7dxTRpbuE5WV+r/xVb7XoPLEPErBIq60R\numW5u6IBY0+6kffqLkyc6gLGmAYrfBEICyNwRS6LhWxyFdK9GB2tGaV1ppuN\nn3iiQF/aqqKEXI/rs7MODk3piIqf9VuMsND/gIi2X22axzipVjKR8hDuA7UQ\ngkWcLFSlz208x0YuyXXnnEsH6SQ0VyEGT8iDx7hePyvNLGrtZHB02Wzh7qhr\nf8JhqcF9WWCrKFZ4QJfK8YguurYMm/224sCp+MFZjx3Y98J4gtPqUgucp93I\n3qjewFOTGhCVIES4Hyz8xNWmxmkn56ff7zqnpqwfXTNXglgxrwQxQpbzZkV3\nR3NF\r\n=VtCT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxv2iFRJD7hycNbg4pFPqq31BYNvdya6D0DU6Fxd3qxwIhAKO/WGtMF9eRqXUTNY8MTF/bD4bo70h6zzeKV7XJxHg4"}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.2-rc.0_1598339552184_0.6376563554539472"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.2-rc.4":{"name":"ipfs","version":"0.49.2-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.3.2","ipfs-http-client":"^46.0.1","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^3.0.1","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.1","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"63d4d353c606e4fd487811d8a0014bb2173f11be","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.49.2-rc.4","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-6CDK67VciiznN38tS6leV+dSkAdpYU/KPmHMP3giUPtI0k/XywVCkpB5qq0RewG0Cfyj1r4nkzIWWstAlQreWA==","shasum":"3c50efe47785622502374b7e73987ee89c5507ff","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.2-rc.4.tgz","fileCount":337,"unpackedSize":2461320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+iPCRA9TVsSAnZWagAAVOgP/Avwtz1yTeQvgiba4qOe\nCc4A7685+KhHOYtSk4c+x0UtfQbEjEDrm6Q8bRN42wLvIRGKbqr2FFt2WJOV\nmj1sdkecj0QZSeYz2UGwwsABPLkAZk6FurLVsdvZR+Ih5NtNFaV/80XsbJka\noKNB3fa0eG0vGDYcznAu3NLvHjgfabxv23b/5uejxR6ONPnSrsT6LjVn2APT\nY7Xn/krOrTK4irCVB83TuO11dBsIpcez/TyPLuz7x4WaPPzZ5lThOsfeypYT\n6gVlW/iP4BLZkaHlMm0D8P8VivZkW+6wEwtbPaKeGxwCNVhtOxW94O73wSW0\nnnCdWPxlRFCrWdwLyr4anLg4ItvDNhPxlxkAe+gkfteSiQ5n/86/VMT9KuwK\nMmX1KJDRz4yRx+K24jDaF5uwmfPo+BQyReZ+OaRFLwkk8h9TiCxdj4sQwLRk\nPn38Nu4+p2tlxVnyyggpWTjoC2Neh+9ymrkUsmIhHAkm16A4y+BL3lajiXab\nyTdqic5DHsXwhTMK78SatZpR53GQdXAEwqswtSGOM5rut+v3On86438jIXEw\nxz6wDOLBH5a3E86RPRt/v18RpNv1Z4eh2pTdfbvZAozGCr83fYTCTw80m60T\nAb0/felPas+eeNt8ei4kGryyyEPVjyyOLcuBh0VN1ognUmeMPkhOe1igK7Aj\nEFdk\r\n=LGYH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgSKSnNxDFedxenDunXJdnLSjOwozIUMJAlimXk2OzcQIge8do0Ilqkh13lPsuS8BdB3vq/PLxhIFAyuVj36YH3CU="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.2-rc.4_1598548110020_0.5178225324272294"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.2-rc.3":{"name":"ipfs","version":"0.49.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.3.2","ipfs-http-client":"^46.0.2-rc.3+997508d5","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0-rc.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^3.0.1","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.2-rc.3+997508d5","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"997508d5674631f63aff9a3c0295e57510363080","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.49.2-rc.3","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-Mk5jXpspdaQuVy1lbkL5klS6jHSEZIy2vBGe5M7ubcxH3de0zkiv3gJmvj/JtuYCZqXyVx7RtSGyMZnqiqRFbQ==","shasum":"5a208fe4c499ff15c672abcb7ef0ee717ff516c1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.2-rc.3.tgz","fileCount":337,"unpackedSize":2461383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+0qCRA9TVsSAnZWagAAmN4QAIMFdl4TjuNdCrBIzylg\n102KjZRvB2LYpuOyRS55GDvFnbzBf1I+zrdbPGfCIGy8qL5ESew+Sxm/8fgK\nGVdL/X5D4y80O1vVp3mlVYaAbT0UmvZHenAV094xzGIeb4fO/DkIZhXDqPGu\nVEm9pYMauCVp/1EAmv2rbYzHZetHUgPidpS/9lQLfo5hA5ko5xsdburXMvXT\nFhExaSt/zm3LJg67Oo+fPZC7Ngkg8F3CxTxv2SMLQy3tKBGQGjTYAiSdA/jN\n27oRUU9svpNwFgKvdGvPuidl9AdnywHyFNXJgsb7bfWM/YiAqr46iVInmG6n\ngjJnRqCQNTpJnM++RVPEnMgeKhScVoZAyUE2juzTLHR/RTJ3HG+V/zEADBBg\nVyrnGjjRLzhR01b2q5dnRFPR5qxDg2JTPRNB8jtB13EWlLAJIV4oiFB2wQVp\n5kZR8Owye9+B1T/3vFMf8TXnlpKELuuDWhWMqjHcRhVWKN6Nhzat2Rh1EuXc\nRI+CgOxgB02vmbCi1ElQVauRoLiorXhp7rOoFuPnqVfhwmTdUzI/OjPLWVVu\nFcVrtKCwVBP/AK8yAmelsZb08peoLPg5NtA63wZjlLJoxyR5SMTN/P8h0c8o\nd6LnYdtvnkAXsDL4v0x8Jf3kgI0G1AInrC2BYYnr32g3H0kfOwd5aUMAvkcj\nYTQu\r\n=QviJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYKSV6MojoEvfmfUD5+h3VylkvqPYzi/cySoO2sKvuaAiA+gLE11GlkY/OlknemL6zFhTUf+yW2g2Fx0QGyy/iciA=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.2-rc.3_1598549290149_0.5685347048712606"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.2-rc.5":{"name":"ipfs","version":"0.49.2-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.3.2","ipfs-http-client":"^46.0.2-rc.5+1b6cf600","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.1","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^3.0.1","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.2-rc.5+1b6cf600","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"}],"gitHead":"1b6cf600a6b1348199457ca1fe6f314b6eff8c46","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.49.2-rc.5","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-XhQhizD3oW8uThzVSANBaXiDlt+QsK23e8kCbmi0YN2Y1OBmWVDsWBsop1tz7dpRFsf8IfQ/OMw6wkH0UyrQFQ==","shasum":"836413ff5e5289676b7030091854c5dc8bde4bf8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.2-rc.5.tgz","fileCount":337,"unpackedSize":2461746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT33yCRA9TVsSAnZWagAAxbQP/1ApqxapwFas3qF/kowN\nmG/GkulCoYd5hekE0TWGFPOq6C41VNXwHS4tCi1l/uAZF/yjrsdVP1hUzwgi\nBSkz1F7fKrVtwxmZ5NzKPBb3MT81ZNQU3hSY6lQRaBcB0Q00euB/KLk4sYFS\nFl3qsBbzlUoXJlEGWCdx2ktwzHcLVzCSM7aqjLTqHFSWuWAsxXbhCqy9GOjg\n1ZAzy78IkFKgbAuQlzxNaJlJEoHLfBVh/fbns1zh0p4LudxhLRC8eF2LROHL\n6z3A7GyiPc/baYAo/5BhiETPFacJJgq8L314UnnZ0rTGhcgJ3jhfH6bXHL/W\nPPhJvxYAuYWGVHob7hRBhSXJbJ9U2LoR5oL/kkcPB3rfX/QdEEyaPFNy2+T2\nhJa4UimK5JXa9X9goRF0M6oQZGKABXNOnoUZyCMJwuGl/zK0ci2vpSfdLYVn\nUNyCbDzGtNDAeaI7JveQkMgrGze65LNkz34Eu/KibyTsPkW4vg9V2D1eK08t\nosrtfwkk/vjNKRk8ZMH3Co+fENz+G6BhgUqj4osMZXubi8WA64WQlkq9dweB\noaBnU3x5BXgPXHC+AcJ3bKpXEyAPPLnCieGk9bsvLJOWl/MSBF4j0HIviJam\nmNX/MvSldhEXJYN8rd6D+fJdP0u5AGy5d4HbVxXSvcHMNVAdiw2U1iC+LFZj\nZqw9\r\n=MkpX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAomQxPMARXtf9BXy63xgusEciAZBB5KzEXBzg8rF7FZAiBIfuYnGRLBPpiHpLnPxUx2WhOK/+PdomG4OysZ55Wpyw=="}]},"maintainers":[{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.2-rc.5_1599045106264_0.0754705622983971"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.49.2-rc.12":{"name":"ipfs","version":"0.49.2-rc.12","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.3.2","ipfs-http-client":"^46.0.2-rc.12+6816bc64","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^3.0.1","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.139.1","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6816bc64ccb9bf852c2b9a26d9ddd19b9439dae6","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.49.2-rc.12","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-4AvuU3t4pDnVQCqLJluuQNORH4B0JyRSLprx3TjqaDi02xxOZPtGsSh4YA0dmtJpWJxzxNQwOW8ckHaylbwsBQ==","shasum":"520b30d7ac81ea868c2f7da9f25123ae917eb0dc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.49.2-rc.12.tgz","fileCount":337,"unpackedSize":2480891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUOi1CRA9TVsSAnZWagAAWyYP/2OWjZXJLLyYBZ1LiKA+\nHPI7JAh9MDav9/qU2gDLqwYJeAMLniC8TnplAzuUjrXo1zKQQ55sut+cjH7D\nNG/bb/7bWTQmhj8PSU6ZJ9yeokummCBMYcLpzAHPNwkq0lpZxeDnYNHCHxZY\nQRt7+DxhtP6zHAFtAARC55zsgYhvUCec6Nj6224dv1IFBLFaXl8QvLsnrhBJ\nF1rd87HCYEuSK146fARM0WvVN8V+oijv/MQ3pRQlAcVXyPhOekOl0yWRGRVv\nRqWjbE6HhIo29rEtjom9wFfMl9xNie4+prTb52B9jVQiPbjTbwGKMuIAti7r\nrdFCrLNCr5xJog+TGdgIlZ0hFOTrVjccMa26DOtP8LYdhCtf41ABUNVpYhN9\n8c5p7GPZnhKA6MVGtcorwBjIn9nTx3z9wh1ajr94GyumSIEqkpQLlnSCEXP9\n+lTKUUxnOKknokfWu5MdEpbtmaHEK5sjgEPF6ueY9oUMriL53J5meLjBPff2\nanRk0t/WsUqk9oPJDHgeKxVB3uRlLo15FpV/NLUbnjBG4oyWH1NV3HegxZfG\njCc3JvNG4d2uMOphzpW1QCIHEkpGQScfZ2TQavLFElmBEu+FLldGd8omFGDc\nFQXB/1rnIMlrgQFD3ygLz4++LcEGonjCaf1z+xrhrDBHY8xqcHGNsl1zb1FM\nfjJY\r\n=JFqC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG8gwlJ8PPFwb5C9dCbQZrurxsvUJ76POSUjhtP9wLZQIhAJSyeonbKzcatdrDknNBXPWnhiikaEi69FjMb9PZvOdx"}]},"maintainers":[{"email":"alex@achingbrain.net","name":"achingbrain"},{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"},{"email":"mail@hugodias.me","name":"hugomrdias"},{"email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai","name":"ipfs-npm-publisher-bot"},{"email":"jacobheun@gmail.com","name":"jacobheun"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.49.2-rc.12_1599137972781_0.9193312878561997"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.0":{"name":"ipfs","version":"0.50.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.0","ipfs-http-client":"^46.1.0","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^3.0.1","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.0","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5ea027cc1d92148210e4c42d56b583078cddefa0","_id":"ipfs@0.50.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-T9HZ95y817Gpt1JZ0epKZahr+CwvefMlyfb/raiK3RPD/Uh6qNTcpwbzi7STt0zBfISzqY7hgx7cC2tkFNmgSw==","shasum":"ccb3ed015617f7716e2f161b6d1c1a5b498f4602","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.0.tgz","fileCount":337,"unpackedSize":2482431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUPtGCRA9TVsSAnZWagAA2+YP/0Ttfpazlo4yg+2uoFdc\nCSmM14IRz4kYb/YdJVQ6Gb1k+QbPVjldOM5zuOCmF/sf6SB3fGfXvq8jDq+y\noQ2e29zORA6ifm5nxoBgY3HM9ayUG1Eb21Ld+3LyEOVgss2BLP4LSzb7GwSa\nJEWtLLjJ2Fz+LCI+xIzKmR3dGQZ+BVi0APuUpEF/37hJTAFt+g5ZDnMmSDw6\nC8nwSdUerrm68jPFBNSJcBpTWcWvDrgEHfTZ6d5CfiZRd9kGcoGRlhYXPgC6\nQgrF8WaBWrTqYVBCo+o8kVViRzdtKz2Nby8uL+4FZIFWnj/Am/B3u8jeCWL7\n/Ih1z7rMF68LfexrZVDKXnHNPAe50Ow650JeNxUAHJhzvxJ+oA0P81ZY9sNC\n4YCgNEJC7MLY1zq/+0o2m8TfGSEd52hspagsuv8Dbu7ZS6FBsfbB7iweXe65\ncEKqTjVKEY5e2PrepMUpCJQY3BhKtEl9XP7moMf+sjZVa/KWeasn8qkTAA/N\n1ou9cxNQJOZVSkubHs+k4A+h6RoIjcT/2utO/rOZdH6KCIQOttLVY6FVDquk\noYtIolGIGIFolbXyOcu7Xt6a87Pdxvq4Z4nD0II4/n+GRAF4V/TCYYlGLS8j\n58Qg2nwT+UvaUHJwQiAicUJ38nZnTqxU/Fc5Py6939tlfsXCOyfT+MxIlpgS\nVxz8\r\n=34I/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdjuFTOgqXD/e3nwEA9lT8Lwg9f3+Tb4/PmRrmM8NYUQIhAOetyKqYIZMz84AFkFk60SdQgrYT54I00ObDUM4mE8vk"}]},"maintainers":[{"email":"alex@achingbrain.net","name":"achingbrain"},{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"},{"email":"mail@hugodias.me","name":"hugomrdias"},{"email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai","name":"ipfs-npm-publisher-bot"},{"email":"jacobheun@gmail.com","name":"jacobheun"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.0_1599142725662_0.6708915975356231"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.1-rc.25":{"name":"ipfs","version":"0.50.1-rc.25","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.1-rc.25+6b7796af","ipfs-http-client":"^46.1.1-rc.25+6b7796af","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.1-rc.25+6b7796af","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6b7796afb534876d7e529788b604b120d4114f25","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.1-rc.25","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-h26NLaMfqczRfOdRlboTWn5sZAGDW9DBRErJInl+/ZTrv+0mI+SL5CcC3hqL0pJIBz7zIVLjIabHUmi3XRfTvw==","shasum":"03fb94e38037f602f58000bd7bb3655d8ec39897","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.1-rc.25.tgz","fileCount":337,"unpackedSize":2625945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUk7aCRA9TVsSAnZWagAAZRUP/AgSBEPFvSmfWzWRUO5U\ngyck2D51LBWo4VJl3ivjKESjfHgL6Cu1w2UITaVFLoFmh3ucii9aJSYktmfU\nPOyDPOvgtgvw4r6fGzU7ZDu1fxuE2GRvxg7mFYstzsNhCwkQ2R5xl/UgfrWv\nFDp4i1fIDFgeazW0Xb9Q4tw/wrvPXa6xJhqPsGzF+qfVa88MURMr//3UfiWM\nBXCxhu2CMUapKwVobdqHHKT/2C369kHXi/QrDDbEeGsIfNh+qie9u18wLWZV\nbm93HjawqMeOwP2Hitq0wWOo1PDCtNUrQ4LjTLCpdpZ/HlQvXeLYd0pfRuk5\nH2+8W8oZ/6uDuipAlU/gjIUy6/hP/abriBJ/r8ph/iFXHxyKh4XCawRd9fqt\nAeCkGJH3nhg2AjkhAYdZeCo+wRQbgpoo/rjtOO0nrKJXYK9Uzv72qZ3f2+Y+\nxPvvX3ZalIfx0L07EE0id5m7iUFnfaMzgqYk+HZJdKKZCyFREempEYHugPnG\nnhf4SWYxBFB93c4dI1wek+AGNvjptdBThMBwZMYqqq7L7FoGA3zIYsr1WL9m\nFk0MfqwXfXGe5YGPakh1JCJqqD2FGRXSVZ+SUdw3/RDYFacGGb9nI1KblI1l\nrji7yTqjMDTcPDTD4nmuGGQEgU8LDInKWns7QPnUaY4AefKyaJuOmmNvxZBu\naxuF\r\n=SeJE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaKg6RkC6SUwNrMc8EkEn5o9q9hESAwm1AYurzWTWSmQIgDyUqgrhkSWe7x7tU/vgQ5pC+PdwH7vsDaewO4N1bNbw="}]},"maintainers":[{"email":"alex@achingbrain.net","name":"achingbrain"},{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"},{"email":"mail@hugodias.me","name":"hugomrdias"},{"email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai","name":"ipfs-npm-publisher-bot"},{"email":"jacobheun@gmail.com","name":"jacobheun"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.1-rc.25_1599229658317_0.4777366998439112"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.1":{"name":"ipfs","version":"0.50.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.0","ipfs-http-client":"^46.1.1","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.0","ipfs-interop":"github:ipfs/interop#refactor/streaming-pin-api","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"67d048216ca391b9d9020dab35ffe7a46062b93c","_id":"ipfs@0.50.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-TTQzDoElF1ahcwebXXho2q+0vVsUz8rDKnTnz44QOkSB2cgYIIT32VIXxgFgoy+CayoFa+pybexQqR2lKRtajw==","shasum":"aeedcf52ac494fe798a78116a79bca356641cb6d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.1.tgz","fileCount":337,"unpackedSize":2626056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUld8CRA9TVsSAnZWagAAHTkQAIXsWxaHEMsVqw1NvXLI\naF2jPvoSfB4QK5Mybgd41qsA5W9v0Jrys8B3bN4w4c+1GaZbR+AftU17lW0w\nA4XlB1PoFw8sJa0WHmDM5hIYNu5ZQ2ZFyIfxZhbzj23CiSyxcLzmR2bvXSjz\nLZroXT984ASvCjOspZ1/5hUIkKn49LVCaOLBnzwKSQa9BbuM35BDemx5Au3X\nktv1gDjmrR1oFv9EQL1C7/cFfNXwrGU5VXg+m2ugfPKiPUwnIbU+45T8v+RM\nwlq04/EcXnle+joIOutmZFnJSX9V08ChVF2ryqwY0ZZbwZYu01wFXs61AAxd\nqWVWwMbiVQQE7ALJgpaG6sWwl0TMbqAusvVK6zvWI3nx6JaeTE2Bg5ZacZIj\n7j1bJaNrapjZEFpb8gfPtAROX5gZwmft2vcaTRB7ZmRxVOxEoV1KHGd512Uz\npJ0tomvqti+o5fSJJ7yHdoe8tFAHvTJpmt9EfIA+pKmi4fdmSWRZjsO6K3fB\n5KszngH6XE2GviY1rOjNqJLC7HjlMzNJLqFIok2YFSxLsLAzPrX7qIcZu2v9\nV9EvIUVQ6avSgqW59yj+MyxcYjMtdvss2ZLcpDEEQ2XTV0uFAA/LgX22QMcm\nWnTSHJeu52YzvfHfiyMvz6ac6JZbzSLgFBznbca33kgh6q0KWeGMKi1C7ZAA\nvlUn\r\n=Qomw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd/gw/fkg/+WOGRJKI0O9Oqccbb5IrmEmk2wfR1x6URgIgD5FF1RtPlH8gnCEKW9tIHKBxdGp/qb63+evCx8VvsWc="}]},"maintainers":[{"email":"alex@achingbrain.net","name":"achingbrain"},{"email":"alan138@gmail.com","name":"alanshaw"},{"email":"mail@daviddias.me","name":"daviddias"},{"email":"mail@hugodias.me","name":"hugomrdias"},{"email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai","name":"ipfs-npm-publisher-bot"},{"email":"jacobheun@gmail.com","name":"jacobheun"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.1_1599231867763_0.8146363728754262"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.2-rc.2":{"name":"ipfs","version":"0.50.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.1-rc.31+d68bf64b","ipfs-http-client":"^46.1.2-rc.2+d68bf64b","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.1-rc.31+d68bf64b","ipfs-interop":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"d68bf64b6340750779fdce1e3ca47e8d6fdf8a16","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.2-rc.2","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-Abm+ySjCJyGpNndP/VuUnj7okFJgz5yRwyPRqt7OKm4S7337TCaMKuEvuNVYEE5uFxV/QCsjZrbEE6T2F7fnoQ==","shasum":"bc0ee91bca31ec5a8023aeaa1d8c5f20c70cb538","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.2-rc.2.tgz","fileCount":337,"unpackedSize":2625926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWMFrCRA9TVsSAnZWagAAkZcP/iQvrsfPA4aN7fB6S5Za\n+Vv5hO8Fra5x2FIe6/aNSNnO7CEVMpYwLT5hFVs1ruQf0t1r0hjcuMt0tZzC\n6znQxCzsw/MxatacNHvV4sMxspivvnEHXTpoH/skmPPch1aNacEJSvf0sgi8\ngfKPUFZeaXoxW+211mDD5LR/1iLeesDdeU3C0MqD0KWQjOeH+LDFCojBDswx\nsJIW9PFTJw/L16srpJPuQtJ5aPnH/CouanpMKD5lMmuTmHZ3e+6Tf9QboFWu\ncdM5akG5/BjMhjzNUtxaIcwwJy1Hc0CP+GvSLE7ou1E6yMtanUvo8sdIWa7b\n88IYU6rBPkohrOK2FGQmD3TSEDbu0h/m2K5X7L0vM7KESOhOEEmTHKeJDv7e\nvx70QQmaHxpTRBtHHqt0M3WjYhJbEyLobHWGSr9lz1Ahzdm2bZqK/DjIAff9\n1tAMLpFYmqJrrxQg6DBDkpeEH6SI65YnbDnW7Y9xuj0Q8tsj4axHSYmJTpHX\n7fvFIqLSqQO9MH7Xqwx/aFh47Z9RlW0IwQaIaU7MyM0nhlDzZwA3lV7i5Lj0\nb5CLWrVaAC3fgAV8f5ne6e3/wZdZ7cvdtsvm4nakqlCq/WjI8c1GtcMJozha\ndB+VX0pVNb0GzAr3SNWx+RNAsJXeKP6wjJ5WBuOm/R0mRzTl7qaF+PQTCIyu\nhIHB\r\n=zyYp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiL+whhQxIg1ocOX9ALH/WRAxloPfG4PZ/QmeiwFLrRQIgKC7HYB0MKun5j3A43nawGGrNm6iGoMkxk0O5puV8Q/0="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.2-rc.2_1599652202268_0.4534828496465182"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.2":{"name":"ipfs","version":"0.50.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.0","ipfs-http-client":"^47.0.1","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.0","ipfs-interop":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"99c762ba6b3b71e07596b2930c09fb143451aafe","_id":"ipfs@0.50.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-mgXab5fxyUwQpy/NNfOCplql+Em2DhyWLYjTOgIaaCrWTssejeZyRETBYZazAwIk1xNsIDX3IgOfXlzWw850bw==","shasum":"54f15277728cc8809d4dc0f83da79e0536b0c3ad","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.2.tgz","fileCount":337,"unpackedSize":2626050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWOYlCRA9TVsSAnZWagAAKbAP/Aj0BVIa0jQHd8Su7NJB\niVfeVy3066F3taF2iFM2ruuZt7SROAuId1UVYjqautBs4Ky87e7TfVy3X4hD\nn8xtttzOwjpn6eFG1YYxPo+gqHXz61XeZIiokozc6phmcCCJi+yqOfqDo0rm\nkecSBw73gFy+xIHpTgfUsC7dPWqK+vR3kvCC5Az/rpno7CZV56wjPtDoSWP2\nVDUicHSIfmNLVkPZk1C1wU0HOIYPDBxZpX7RzccJ9Ma0fguHB7yVbUKYhMER\nwkej9uieMWxL76VzB2XNRqa2LRoTruZS6NI5npNr5aN0BlsQFgRT3Gr4WhnK\nQ1JGFYLHxKf4f3BUfwIWSvVanCwLw19+sdfF6DdWGRCqVY8Om6OyFuVLQnKz\nhkWoRrxO+IKGt6RVfWkFZYVaudbkPxfgKBIRb1OrdYN/5rvAzG62pUcFz2oy\n8yrJIFLHX9/KEEh4Qyf98Tg8Xk74FLHEeeobDVWgWQNBlawWnZoSOSznS6Ht\nFkN7pDbWLgwiv6i0o2kD7CnZptC5pod8WMVJ9+fLtS60Z17ERwhLn9Xgf5sT\n8nWE3kbjz4JnmVaAR76FT1aGSYXRHGXh9BnvLCxuDAyC6sE/2HkCO+J00bRK\nj0e3eanWTjHUZOpdRnht8O9xUFcjsHo5sqkeNyV4qpowqT3KMeOv72Qy24ae\nz3c0\r\n=CUl1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIIn3eWpKqSoMCSxloWcEfWfEM18uTdzogOBSicHxdhAiEAoXsUBS4GvZS1RcqdcuulfJnQrfyVgVa4h1oDO4AHwVw="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.2_1599661604661_0.23721542040864652"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.1":{"name":"ipfs","version":"0.50.3-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.1-rc.35+867d6bba","ipfs-http-client":"^47.0.2-rc.1+867d6bba","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.1-rc.35+867d6bba","ipfs-interop":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"867d6bba8561adbe6ff67221472f0cbffe4e1801","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.1","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-kG+WviZrR6DzR57IHXGzy58wim5zQTIbQHSX6VUgTmF+kYWx1nOJTtWp97uCADfpYhLY66LEf6LeTwEm/xMyag==","shasum":"5b448e96985d29ffef335ba38d6c47cdf98ffa36","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.1.tgz","fileCount":337,"unpackedSize":2626069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWeDWCRA9TVsSAnZWagAA3SgP/iZW4dfZOjjuvzDeBJkm\nfmJdL6cwkDYf7/QTRTIBtpK/qw6VTH/D7UrPJfxBj/x8XRL84DYYlv4pfJ7K\ngDTm4nL7yI5xbZni4sDMEXH8M40QdmKXa6hyi4VV4++3/FeLt5AziHhhs3BS\nWhi0PFv4BPXf8KIgxajEniHUlW0OOoinWfuLzeMNpJUaJUILv5k3GscxTiA+\nZLsK7M2/U7OqkVrcWJuBq7NtGAF41Wy/V7ENn1f/fglFiwekKO1eXfXl2B70\nWk44GKFRhVDmJaQvb4/+FUzdHos8c37bMC3gkcoSUK3Jev6rtGqeKJGCqqZ0\n90NNnCidKbNfwl63QBXhhl3nzqEULPfDKUCGtIYR/25uF6Ffhw+GJcg22Pjy\n8VOGzdYyCwtNWWLXhhL71R3uHYfwyM9Sc1SBlOuoVj0/AAEOuvSrUt4lkram\neSXqEvT0tDAqUg578qmwHa6Rc7WN4ifWMyk6PR5HFgNMVbeUlkvqRlh1uc2B\nd393u9smxa7vGTssz15TeKRezLqLZFOxXyBM+j0Q92hiXSmys3R5NnGmKMkZ\nu5OQJDsP2su2vvfavtez2RZWPHawaOh+OwrD/f/HIUDYdBNVZ6taLxB/rabF\nTRPZ5R9bq3Nqckvg/jazRIT5coYQUoVNuSfLi7SKTswurIr0qZWLidPtfM2j\nz8M9\r\n=5nrF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6jFAAd7jPmfX10AuZ8CPR54I2D4JdURhMftl9iLMOSwIgPHjReiUOojUPHmuR5D7pzBTxd+RScZXZ27uWjd9tSuo="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.1_1599725781639_0.34524817779411276"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.2":{"name":"ipfs","version":"0.50.3-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.1-rc.36+49628a6f","ipfs-http-client":"^47.0.2-rc.2+49628a6f","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.1-rc.36+49628a6f","ipfs-interop":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"49628a6fe9879ee8beb1eb97236de05fdcc74a5d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.2","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-W3YFWNhGpqCEVAVca4aI6xDpD0vSQYfRxTN6uP2j+dexe9yc93pt5xm2OWnlyQOOPG6sXAnlXiteL6fYE3D9PQ==","shasum":"d0f4a7386a521b5ca97ea3eedc428ccd184c344d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.2.tgz","fileCount":337,"unpackedSize":2626057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW5PRCRA9TVsSAnZWagAAwbgQAICxcI/HOmpuK751485O\nJ6avHI42YQsHgDfNoPiaees2vDtkhhdMMYyWmGMakMWf9YWVoDxcu9NMZoKd\nt7gJMlTPcO+qjAqHB9yWEVvZVr+usHKuo35o6qDsQ4Z4XGvJXVjwnFziZOzU\n8ydB5q5tMWAr2Bq6o5whXSxd5/cUYsBjN8vOYxQYUbC34yJACPZIuxmIcP9O\n9seEZj5/ncoSHvB2/nXUhu6xGa25g40mYhiOYDIDDoWAVLjGTvKWdGBh1MW0\nijZIuGR0BYgHQwjSmpo9NjCU6zvox7s7QSkLJBdP7mzL9PddOzehQijzGWqs\nY9m0nUavzwS+Fy9dH3sf8bBVyUHp6qhOdx4cYIDfGI2rD16ViNHvz3sedRvU\n4apMjbPq39NTM64LF1qSIoSSp31zGB0DcGZQbZG/J4wi8NFN5WtM53Ewmd8I\nHGiugm42GBlUTW6MGc9Px0IqY9dv0/0PjAtaVLM0MgpMsQ5Z+GLwJojaKMf9\nY0FU7iCmfaTwXCLAb7wiGOsyTrmkrhXE/XN+JjmZxRZdqHS+nnKamAKT9Nm0\niW4fIgY0T4tPUEztu2VXYEPEmzZZWlsRUbhgDgK/Tf2cgehJV1JGvqa7IvRw\nNS69SbQ85ojjJDWMmt/iGVMoMZjrtcqkvla3HZ73SASNAAavYOtCBtZyQwDt\nOo3R\r\n=6Etg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIavvk33VYc8WGk0ONj+sy947cCQozy64sCJje4DL9pwIhAP8VAO+8rvrVJAGy+DlBbO6q927NgjOyhWd1NKpm1jPB"}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.2_1599837137069_0.8396586536479478"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.3":{"name":"ipfs","version":"0.50.3-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.1-rc.37+420cddb9","ipfs-http-client":"^47.0.2-rc.3+420cddb9","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.1-rc.37+420cddb9","ipfs-interop":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"420cddb99873a27e4afbf1973c7f06c5415fb883","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.3","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-n7ZeBNAEy2bDjJwhWh/jQqZsEKBbBlIjPV/JN9BSnY/s1T81tmymFjalf9YcG1/s363rqyc4DujvwKJyiYDF6A==","shasum":"8642fd88bfe34b039ffa1e26c88b4290edb63d99","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.3.tgz","fileCount":337,"unpackedSize":2626530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX2toCRA9TVsSAnZWagAApQcQAJXiDDa/Lr9XJPViJ0NF\nopNRk+pSTZyUFQqFwuY6YU/2eqec7K02Kddvy6GnXcc50wBiCgalcYnwX8D2\n+PT7PCj6CPyhsI1GfsVz6aWFBL755KLukfnbaqx1/IrlEuqTSmatNEvCt37j\nb+GwYn2IDhNBv3nf3uv4Eb5GvSk/R2CDIV6KxpomUl6i9dRBNGGRDsjQI7Ws\nR4FK5c4+V7to2vnjluiKm+2Ior/pp/xVuCawOqEbFBeLA6VBWZg726hvKgaz\nLB5f7CXJTUTvo7z7Rft8Eql9JUiS6AhDbzOAmyOLl8Xv4bvfcVCnw2XzZzEY\nkmSRpb+iGQaZZh8Xq5GL4pnyHnjLLldaQzW6B3vnIZMrxaAa1WnUN8JeFFva\nOi1z6V/G3fwUoSaIRiz+Gbnpc511hCGLxQ8W3G2lbuqVNEMI+NFsKLLMztfJ\nk3ypEQ+xEVsW9NqEi/ysGmbDkHJb8U8e9H+CY67DVm3C8ks4KB6Amu5Mne7s\nq9nlIsSHcZHk/ui+IrOTL21H5HrsJO46RyIxs1bnojusnlHvoEgxQUYtFBz3\nO/IzQLf5f0Ip8ZCpgAlEhvVxwvSL1xJ47mxNApVDRy9OZHnEkmIB4788sfAm\ndhkZlvrcDFm7vzW8ZC6Z8rHhjL9S3K6GO/gSOHBqYhjKwaMykQKsAK+LYzr3\nRT+/\r\n=o5li\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCc0T3+XQdWZG0PdW3/I6HKvKVYc+PEaYmv8/eN25+97AIhAK86hrMCB46yn9pQZ0r4x9Da6Yr4s+cRbjYU9qjSHFeD"}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.3_1600088935990_0.7416937715886667"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.4":{"name":"ipfs","version":"0.50.3-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/core/index.js","browser":{"./src/core/runtime/init-assets-nodejs.js":"./src/core/runtime/init-assets-browser.js","./src/core/runtime/config-nodejs.js":"./src/core/runtime/config-browser.js","./src/core/runtime/dns-nodejs.js":"./src/core/runtime/dns-browser.js","./src/core/runtime/libp2p-nodejs.js":"./src/core/runtime/libp2p-browser.js","./src/core/runtime/libp2p-pubsub-routers-nodejs.js":"./src/core/runtime/libp2p-pubsub-routers-browser.js","./src/core/runtime/preload-nodejs.js":"./src/core/runtime/preload-browser.js","./src/core/runtime/repo-nodejs.js":"./src/core/runtime/repo-browser.js","./src/core/runtime/ipld-nodejs.js":"./src/core/runtime/ipld-browser.js","./test/utils/create-repo-nodejs.js":"./test/utils/create-repo-browser.js","ipfs-utils/src/files/glob-source":false},"bin":{"jsipfs":"src/cli/bin.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test","test:node":"aegir test -t node","test:browser":"aegir test -t browser","test:browser:http":"aegir test -t browser -f test/http-api/index.js","test:webworker":"aegir test -t webworker -- --timeout 10000","test:electron":"aegir test -t electron-main  -t electron-renderer","test:electron-main":"aegir test -t electron-main","test:electron-renderer":"aegir test -t electron-renderer","test:cli":"aegir test -t node -f test/cli/index.js","test:node:core":"aegir test -t node -f test/core/**/*.js","test:node:http":"aegir test -t node -f test/http-api/index.js","test:node:gateway":"aegir test -t node -f test/gateway/index.js","test:interface":"aegir test -f test/core/interface.spec.js","test:interface:http":"aegir test -f test/http-api/interface.js","test:bootstrapers":"IPFS_TEST=bootstrapers aegir test -t browser -f test/bootstrapers.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:interop:node":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t node","test:interop:browser":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t browser","test:interop:electron-main":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-main -f ./test/node.js","test:interop:electron-renderer":"cross-env IPFS_JS_EXEC=$PWD/src/cli/bin.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop -- -t electron-renderer -f ./test/browser.js","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"@hapi/ammo":"^5.0.1","@hapi/boom":"^9.1.0","@hapi/content":"^5.0.2","@hapi/hapi":"^20.0.0","abort-controller":"^3.0.0","any-signal":"^1.1.0","array-shuffle":"^1.0.1","bignumber.js":"^9.0.0","bl":"^4.0.2","byteman":"^1.3.5","cbor":"^5.0.1","cid-tool":"^1.0.0","cids":"^1.0.0","class-is":"^1.1.0","dag-cbor-links":"^2.0.0","datastore-core":"^2.0.0","datastore-pubsub":"^0.4.0","debug":"^4.1.0","dlv":"^1.1.3","err-code":"^2.0.0","execa":"^4.0.0","file-type":"^14.1.4","fnv1a":"^1.0.1","get-folder-size":"^2.0.0","hamt-sharding":"^1.0.0","hapi-pino":"^8.2.0","hashlru":"^2.3.0","interface-datastore":"^2.0.0","ipfs-bitswap":"^3.0.0","ipfs-block-service":"^0.18.0","ipfs-core-utils":"^0.4.1-rc.38+e8c38f48","ipfs-http-client":"^47.0.2-rc.4+e8c38f48","ipfs-http-response":"^0.6.0","ipfs-repo":"^6.0.3","ipfs-unixfs":"^2.0.2","ipfs-unixfs-exporter":"^3.0.2","ipfs-unixfs-importer":"^3.0.2","ipfs-utils":"^3.0.0","ipld":"^0.27.1","ipld-bitcoin":"^0.4.0","ipld-block":"^0.10.0","ipld-dag-cbor":"^0.17.0","ipld-dag-pb":"^0.20.0","ipld-ethereum":"^5.0.1","ipld-git":"^0.6.1","ipld-raw":"^6.0.0","ipld-zcash":"^0.5.0","ipns":"^0.8.0","is-domain-name":"^1.0.1","is-ipfs":"^2.0.0","iso-url":"^0.4.7","it-all":"^1.0.1","it-concat":"^1.0.0","it-drain":"^1.0.1","it-first":"^1.0.1","it-glob":"0.0.8","it-last":"^1.0.2","it-map":"^1.0.2","it-multipart":"^1.0.1","it-pipe":"^1.1.0","it-tar":"^1.2.2","it-to-stream":"^0.1.1","iterable-ndjson":"^1.1.0","joi":"^17.2.1","jsondiffpatch":"^0.4.1","just-safe-set":"^2.1.0","libp2p":"^0.29.0","libp2p-bootstrap":"^0.12.0","libp2p-crypto":"^0.18.0","libp2p-delegated-content-routing":"^0.7.0","libp2p-delegated-peer-routing":"^0.7.0","libp2p-floodsub":"^0.23.0","libp2p-gossipsub":"^0.6.0","libp2p-kad-dht":"^0.20.0","libp2p-mdns":"^0.15.0","libp2p-mplex":"^0.10.0","libp2p-noise":"^2.0.0","libp2p-record":"^0.9.0","libp2p-secio":"^0.13.0","libp2p-tcp":"^0.15.0","libp2p-webrtc-star":"^0.20.0","libp2p-websockets":"^0.14.0","mafmt":"^8.0.0","merge-options":"^2.0.0","mortice":"^2.0.0","multiaddr":"^8.0.0","multiaddr-to-uri":"^6.0.0","multibase":"^3.0.0","multicodec":"^2.0.0","multihashing-async":"^2.0.1","p-defer":"^3.0.0","p-queue":"^6.1.0","parse-duration":"^0.4.4","peer-id":"^0.14.0","pretty-bytes":"^5.3.0","progress":"^2.0.1","protons":"^2.0.0","semver":"^7.3.2","stream-to-it":"^0.2.1","streaming-iterables":"^5.0.0","temp":"^0.9.0","timeout-abort-controller":"^1.1.0","uint8arrays":"^1.1.0","update-notifier":"^4.0.0","uri-to-multiaddr":"^4.0.0","varint":"^5.0.0","yargs":"^15.1.0","yargs-promise":"^1.1.0","prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"devDependencies":{"aegir":"^26.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.3.0","form-data":"^3.0.0","go-ipfs":"^0.6.0","interface-ipfs-core":"^0.140.1-rc.38+e8c38f48","ipfs-interop":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","it-to-buffer":"^1.0.0","nanoid":"^3.0.2","ncp":"^2.0.0","p-event":"^4.1.0","p-map":"^4.0.0","qs":"^6.9.3","rimraf":"^3.0.0","sinon":"^9.0.1","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.4"},"optionalDependencies":{"prom-client":"^12.0.0","prometheus-gc-stats":"^0.6.0"},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"e8c38f48611a4628b04fce4f3b1feb628eabc121","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-secio`](//github.com/libp2p/js-libp2p-secio) | [![npm](https://img.shields.io/npm/v/libp2p-secio.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-secio/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-secio.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-secio) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-secio/master)](https://travis-ci.com/libp2p/js-libp2p-secio) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-secio/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-secio) | [Friedel Ziegelmayer](mailto:dignifiedquire@gmail.com) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.4","_nodeVersion":"12.18.4","_npmVersion":"lerna/3.22.1/node@v12.18.4+x64 (linux)","dist":{"integrity":"sha512-OqrMLQooYtZpKQ2MqN3pPMuammNMOrr8r4VvWc7Vud1OvNKceEolWKA48EYoF2uBt5fuAqSFtf80LXRVyBEwaw==","shasum":"fc5e1333d5b987a2c6013cbba1e7c14f3f444331","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.4.tgz","fileCount":337,"unpackedSize":2635671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbfVMCRA9TVsSAnZWagAAWOUQAJve5Tk8Tv5klN4+nwIf\nV0HUry0qO5hagty5OP/LyMnudfkQbdvPDvT4ch6TR0IYXtCIbKerEW0M+Sh+\ntHHjVfNBsWqk4H/77LHqY/V3qM2loHX2CyIi4Z/GoXa7FTc6cqvdIWQlbpqg\nDXZg4yUIBluGlNUNo21G+NlZwBWowBS/JCbj0H4EwIagmwMWzVwIgX9+gkCh\n8HvrC6qGKW3HOGXTv8TwaamCGFxFKZMwJ4VvbGysrdCmtXRleEgjesGNt7SJ\nwLS/ECliGc25YP2VqTr9APqkZ5AoKn5iNsMXYpt7whYK3ir2rYY9PbWRcGsG\nqCT0sjtoCmxca8xCdxRxpkCanX5Ggpw9p93jqCqITPg1gpLRZsllxBcSVwCo\nZtMptr8oLf3fxE4WTtsIDW0TNQFgc25H8T9V4AVBhuOuylELvU/NfL8q50yG\nEH4kw7uHHbU22RedDeFmoshYwEQwJATFX9UKo8e+kOCPWC4qkb9kcoZ+jGCJ\ndT9oNiqj/DZuI7Y1oY+oe6P+KdWT4BinEPmOaCICo/jW/ciNwCv4wrNuYf/u\nM71cmtQTgMYSabKoKKH4Rb7DDZrfpXzZn+psjc6m3EW0vGxOXkHLMUI+5jlU\ntFgu5dN9ynQUcIieeBD1IoaG3eoSnfcb3BCsl0ynRODz6C6T7yUmeSFiZZia\nLX8J\r\n=sI/V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8Iy1qP0Q5IolfXT3yt3At49sAEgqi9Ot7LDWBwSOYsAiAyK498pTF1IzJCeYeZzAeJE5zcyEzQLgBu7Dh0GmJY5g=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.4_1601041740133_0.7218347975821686"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.11":{"name":"ipfs","version":"0.50.3-rc.11","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5876+381d54a5","ipfs-core":"^0.0.2-rc.5876+381d54a5","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^27.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.45+381d54a5","ipfs-http-client":"^47.0.2-rc.11+381d54a5","ipfs-interop":"^3.0.0","ipfs-utils":"^3.0.0","ipfsd-ctl":"^7.0.0","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"381d54a50a855b3f6c408d3ae8f1e3e5f9546598","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.11","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-D2j1zMLnkTvm1oTMDberx3++1MSPHsfzaDQKsveOxCQ13cNwPIry0LTKYq1KtpyhqVQncS2ZGrNnSf3BAPWOOA==","shasum":"11ccaebaa9203f132f3667c652575c9ebe879377","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.11.tgz","fileCount":7,"unpackedSize":2076295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgW2HCRA9TVsSAnZWagAAjNQP/3MbR6Nj6dQR/MP5n3iN\nhO6LvTNpmxkpmEMOgEScbg8s3VoxcbMzMPE3qWiF7g3IAmRkYBY8xlM1U/Az\nHuk0Afag3VDQb2RNPMn9szO9URT3iM/R+d3UMQC2Tuk16iHY5i8Go40GyGYu\n8Q0TO6OcA7bR9X3SWxwAnux+M5/eGg40JnpJ4nQ67oV8L1S4oAOw9AA63iaQ\n/yE0KnTksItVnKnQmDVrA2MoNHIHwzyMejOCZfojE3mdr+8glN7IMyblvRy8\nhyqxaNq1Ed85qbNkVQljhqY9BFV5zRy5wFFwuH9zL+mqo9WKxfPvcz4LJtl0\nNtQ6Z2B/L+5sQSuxpK1Kis4fskYXnFsV7zZSUQ2XyYeoSHVp5+5L0gLIC7Cp\nA2RV2cusQunmXlGGSCHPXpc9Jz8tidGMmOL3CJ+4wPKankFue93jlkUh9BvZ\nz0C24a5/ZQ4BAC4aGnGEE4lA+c+GA7hv/wipGLl09xttoVAyYKJhJzMkKN2P\nBWIL17OUYXZeUPOd6XiTJs8uL73tIayMuqWrQ2EQqiVqM8f2aiRypKI/7gMf\nPJf8U4tC0YCmElorgjujsaMyLsuymS7Us3gXPiwRepx40ElNjZjwiVWAHxb7\nelLUIh+cS9i59oB72nTAgnvP/JdyDsmnIoQzZJjzkMMVWzJPQOnquBUDd1pP\nTXyB\r\n=WuFM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhRnR1PPy7Zw30O3VI37KeNAM+GgKI9mcKEjP9S02JbAiEAxvaaWvUBR19BY08+DS5p6QQI96Py/iysyKuoPW5N5Fs="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.11_1602317703427_0.42583733791135936"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.12":{"name":"ipfs","version":"0.50.3-rc.12","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5877+0613d79e","ipfs-core":"^0.0.2-rc.5877+0613d79e","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^27.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.46+0613d79e","ipfs-http-client":"^47.0.2-rc.12+0613d79e","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"0613d79e3c4dd088d32de823e89099e81eef7333","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.12","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-ndNXFhuBqcayOvmEYhC1QqQGziMg4G8uT3v3yBCSz0irODk9fHlE5bnFAE4GhnyUtdotMiP3uDNAazADJAOVYQ==","shasum":"4933afa007b88c4a332842fa2c7276e641e226cf","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.12.tgz","fileCount":7,"unpackedSize":2076542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgYlDCRA9TVsSAnZWagAAScQP/2CGxFroBBDavHII9O/G\nKPIpbKeT2Ck9oL9QYgdhn6PW2ThchZU1XyaTkNoaY+7bE10NvsHN9u46Mp+k\nHwPuw01Syc4EUWSWOgjpagIG21Rsp44AchP5MXfmf/jaANi3t/Xze7QudpMO\nyCEr2wE18Szo4arMssC4sHNlcgEwh4iwJuh2zGT+JRjqJ1gTNc0yB/1z2lcE\n7saiRDxka/ghhH7abflf+DR17V0rhWBT2RmIqatQHPzy4d6IMTFYsvB/QGjS\nTg+bW5QG5DIKSuTK/d1wE7bNoWhX9EcGaSzWsXrLrr5zDIAF5Un9s4UvylmA\nbAq+zlFZMCcJWLFSBzZqsoY/nsGBL+5FNLsn6zfFkOREps/jU+LRV+/Rn+Ht\nMUDX/ZgDI8G3u3VVbVeRnjen6L8p1LuV+TKgEDpW9M2DZemj1CxfGcyoMer4\n4JKzOlFWJR61BY7+h8Is3JzU2k2911/Y5AwPoMQIMxI/eo478eQ/TT6pI65p\nxAl4j90PnfIqPngXVer0jB3L6fpUpaY+QoA//uT4XeNoNurshpf1TYhQNXuP\ns48bdXwnKsqmSUT4ZwgJr662+7C5KNtKn4+7ToxAtEDN5Wv8PM7tQOmPashy\nxz3IMVTV9yew9aUc3pJ8cFoH/Udk4AAyd4mF55uqfkvPmy0rW1N+X4BHKrmh\nWABe\r\n=mfP2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICXe6X6J0DSGP3f9ou7M0VI4jqUQoLz19pe2OVLhP1QEAiAQKRsuETMZ5K2dGzMMml8v523nMHDTNqQ78+riLco7Mw=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.12_1602324802922_0.7226597050346291"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.14":{"name":"ipfs","version":"0.50.3-rc.14","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5879+8afb88e5","ipfs-core":"^0.0.2-rc.5879+8afb88e5","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^27.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.48+8afb88e5","ipfs-http-client":"^47.0.2-rc.14+8afb88e5","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"8afb88e5ea3b0678af1aaa633f0eca6156b2130d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.14","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-igt03UyqPXDWLuYFqdLPAGVPUbuEgJhaMoX0aktAYljFWxUxTpLRheuVMrIJOCJqQW9fi0gIC8NKYkfYZoCAKA==","shasum":"2d1a7abf3daf5f16f412213f3857d61620751d53","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.14.tgz","fileCount":7,"unpackedSize":2076622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiG6zCRA9TVsSAnZWagAA3REP/2NzEreZznAjA0IqYzOY\n9vnvZYFJxr6nfEFC0cxmfYcpvmVH1VzBowmVnXlBzGLPz1kXMZMMsfka/GX3\np8hylOk/rVqbz3iV0LvM4ZDR1znH3D0TypwQe4VT9sv0JzWc7GsEcwdpkjAZ\nB/MqB7ZrMDBnSv3Gu9zOuI9vGuar4uHtzIjSWpHkOzMx4Odngqb/NhMrWf9J\naGQKigwOZ7SJc6vRnGXnjvS1tstyEjnqCUSkGD+2l3YSDz1AeZT+80T0SNjL\n+V3jUtpHc2Nk8zQdYlSKTfEvovXgY6N8aov6Bmcu0PiinjEOh7NQyV+dPlhC\nyzaholPC4GnF7rHiWXYtHIW0BwbZfan8RnEW91wEi1KsS5QZLOnMVLCDi1DQ\nb8GW46XI0NquNQ8bsm9SIOpW5DAqq93gm/w04QLDYFSuf5SXOugLohkRI4iP\nbI5cBcUU2wzPfjelEOBPusccDfdZItFLEDS/r1xdXlLYv8pwQe6tEsgPLZSs\nwWCpjuWeUUKBxNoLHvxmTtVY1yszDH7+CWdMuwMo8EkSC5BMqFRCbpWbxUK4\nUH0/SBijiJQMhvBhFVz86Ocb1OOPikTnTrx/YAFp84cIdzSnXCsgfxA3uAv/\nS1NuyP87j/K/Isvy5OSGDEOd+JX3BOYmGNo4z2Z6SUy/rBfLsINt+IxmfsCA\n2kc9\r\n=1mHm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtVwfZBeQdkeJFE0fX8nAZTnEx7+p5/gpLfhVzESr2EAiBbGvS8MH9C9pALxHVfYqwar6fuGRpwrNXeukRfc5SzfQ=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.14_1602776754872_0.3499332729900626"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.15":{"name":"ipfs","version":"0.50.3-rc.15","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5880+b579b3f7","ipfs-core":"^0.0.2-rc.5880+b579b3f7","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^27.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.49+b579b3f7","ipfs-http-client":"^47.0.2-rc.15+b579b3f7","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b579b3f742cd07f8461a74e1f8a08eedf1ee6503","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.15","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-+wcLBrhYPWCfq4thnnPscxCXgjSgH1Nc4r+Y9z3MFT+U3bIV0i1nJLXS+rhqjNxkFrBzgo9SsYNPjRDy45SnMg==","shasum":"42e2bd669150b70e1e5330772b8b4accb8e789e8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.15.tgz","fileCount":7,"unpackedSize":2076622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiHL7CRA9TVsSAnZWagAARwAP/2PoxNpmJeNtGsJrjyGw\nNbw0HK3knW6RqSPSDUWwKhjRHfY6ELq50or6+omUoe9/akNhWqiXaZ1S0vSk\nsi/padAeihPkZSaS2oG29evFcXNoqKDmSgLsIavJ7We184551gnnCn6JP30M\nqs9V3kjwCkSqp2drsYsWCGIPaR5pK5n3uUwBrtT/ROMAKpgs/jgS11/nyoPU\nZOBbZ7nhM3GqOAX650OWR0O1qGzSPbaWxfbJdk4naooU6alUnKjeUpYsYXZU\ndlWoofHF2zAa1R2tgIFIqWvFyODPkTqXLbAD8qnF/TQ8Cv4QXxxkcYoVde2n\ncGEJjMKXjoTdmsfaP45nsDooof6w1MULilz2Y1iMHLz9nhBIrN0hlz/NAk2i\nzLpT6GZC+pv/Koh0qRuSOvGhHml9yftdfwpTD7D43Lg5a3ZOJmTBILq93IQR\nmIa3KF8HDF0QfzPMISdxe8eiq0d4VMHfuF8OeQ5AF1vpM0Dv4ifLuY3riAJp\ngohl5Me94Po/vjn9ButsZYx6T8lBOb+iTmS3XUWCsux/K1K7F7EmBBjLU3Mw\n3gFhdjjkmkkl7iyaMmOjJ8C5ts9OWuhY8AjPnn0ZrsYbuhyVxihcbiJu2wJk\nDzmPNyXbwac4cMoX4U9oQIWhZSs65hiwTAlI34NCVpsSfnygWo/oGAvZLXff\nNRsA\r\n=sVBl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbRTHSEvPAOKNJJhy8r2LnruMwYAoJjSggf06cWk7MbAiANZLYdiK0P/IARbI7P4nqAwp4+ro2rmOIUDE3d6v7m0Q=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.15_1602777850964_0.23657427488876426"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.16":{"name":"ipfs","version":"0.50.3-rc.16","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5881+c53491cd","ipfs-core":"^0.0.2-rc.5881+c53491cd","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^27.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.50+c53491cd","ipfs-http-client":"^47.0.2-rc.16+c53491cd","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c53491cd5fb075025f2bb995a8298b56e0ad0865","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.16","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-HEAOwzh1Rra8ieh+/HQBwR1SY6xCYVhC40kQzEDaF0YeOJV2W848ALV04fTDoYgnIPHfxXtSFzdLWZjUWJqxVA==","shasum":"3fa10c67091bf71e4b3e683492e43f2624f06b6a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.16.tgz","fileCount":7,"unpackedSize":2076622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkGXyCRA9TVsSAnZWagAAVMoP/jK3wilhYOPoGiAMNLwG\nfRalbEISAYbQYTXE+v7oVqNKDRVmcStjcBZXqVbwYdFKQ9le/x48qer1neT1\ndA+8Z+72Y4NgRptndfS8GZ80WyhLRw0d4sjkW5c1VLq8jpEEIv1COGpzCA3J\nNIWsdD3DONT3Vd6xq6tjz7yL6g+M1aGW0kNI5QAfaM9Btjra1PH60UjPw42T\nAbwZxaqUY0KGWHm0XrkXQPq+dfE59I1JIudQzXdQifnLZ6z03Cfv0o8WfA64\n8ofsI++IGIfmreKRJXqtSxpx8fMBjkd/HATTP7z9SYtFdazLiMfZ2XdWRdGu\nP5w993s8T6easFKBtedgR3GNWwLHKZx9eCHG/NNDFuL55JhhtHjOOhPddqVo\nD+YMT9ff7U0tRKabH+KmiA9DGLKMvEfoo+ajeZW19+PucKt+N39e3P2zozwz\nbaJiI02uTv5nBzLipeklMD1nWm15GiOJK8wSYvOne6l8eSvWF57GEOL5BKnj\nzWQ+P8hn1MoPcy0YZPg/9tFP08fiakbZ6Li7pGae15ul2kn9IVlBmZN3uD5U\nnoBP+sbrARjgLaB2bX0nGqfH7Yh+cfJjCcN/QHeOkGJeToCkaLx1VdmZOZLI\n27u3aLqwrRS5PYuUfTjGSIVzFblTZBjSd9q0l68mIKRO5jM9qNx+7EyZnaFv\n6UC5\r\n=Gfg5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD56AzIQBrCUuRjhlocGF13/3cqOV8slgW+Esl7V/r5KwIgEqhwUMn3on+10sorjfFZKvEBxOSniBCuuCscm/O0+BQ="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.16_1603298802164_0.720273843306644"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.22":{"name":"ipfs","version":"0.50.3-rc.22","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5887+a00bb678","ipfs-core":"^0.0.2-rc.5887+a00bb678","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.56+a00bb678","ipfs-http-client":"^47.0.2-rc.22+a00bb678","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"a00bb678f58a07194ecd130edcc8c1c7148e60b2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.22","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-QbmCypDIFbhSmNzjIcEJVwUILYSja1KcjLP3XRGD4tU1huV8nCGiQmXYO4W011KB0ti69ni+i/Zpi+uDAO0BPQ==","shasum":"11a40eb691eee04b210d5c9df9287135f4773e6f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.22.tgz","fileCount":12,"unpackedSize":2084118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkZGjCRA9TVsSAnZWagAASy0P/2bbALDe7MvpS/Pu0QFu\n4yLstsKk+LV/L+eLYEMONdwmwgLPqp/cFF0SdxWz3RYOwtAFOOFaTInRX+n8\nFJmt0PqfCJW2XI34Rnw60qSheIGUZCD69hR4r/S6fkNAKpz0a8OXLH/xZRqi\ng/C0wemJOjo6Kea9QbqtZzqebFvr5ghlmT33G/5lUafWmHI9CXardp/AX9B7\n4undgd/612ceRof4damSVjiKFmC8Hq4LKfhHuqJtnVQe3GHphYTuyH5my/eD\n1ezN9cIkVXyjWMn/ek5ZUARXJprgUdBhuJy6NhE1FjKO4WnO0iS+sq+tOMWm\n8giOutFPzC9OwQ9Q4YoIisx4NgNWwERw8hiOzeaVPidQudeE6NXr3lpgGaL2\nU+W2GPZU0C5VRb9o9UJzmkISm5ULmrOAS5u4vO45pS45fAlxX8fcyeN/76ES\nRHZISd47SezC0J87Aaf9KQpmCyRU22p1UUOs1HIR/BUKYE+inH7Eevjp/D8m\nRXBkDsn0zKToM4e4kOMLowzM9C/Q/ovjJoLlU5ayMgjWIGHKh5i3pJQM2xSk\n7t8DbqJvTSUGaknQjaUDQAK4oVKJPYJ8rDOry3jzCbkzw08B70xcF6X/XEBh\nvjb0LIko6ZBPe8MZiL7XfevoLc2tjAeKymr0OeioLZsxr+06nz4m1IRspzqg\n5g5A\r\n=UqWq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAa4aPQ6JWoVN6+qToWakRDcUdGq0ZDR4p2NIadYiZEpAiEA0YUalrikTqS3J8bF0dlUY8dccWfvENDvHlAjKCPbt9I="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.22_1603375522710_0.7750848699576738"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.24":{"name":"ipfs","version":"0.50.3-rc.24","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5889+13eda29e","ipfs-core":"^0.0.2-rc.5889+13eda29e","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.58+13eda29e","ipfs-http-client":"^47.0.2-rc.24+13eda29e","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"13eda29e37af836f49727d05c1a95fd072d940a8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.24","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-6TafJNzWjNVlXfZ1BmSQnf5B2j7/FdWTsaQkw34r3/d7xMGEdGyX7HnVS8WEZddyBMDEVtfmzzH7R2sH/K8Yrw==","shasum":"7fc2a355fd34f2ca02b06e4e8f76b8aac8267e86","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.24.tgz","fileCount":12,"unpackedSize":2084118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkr92CRA9TVsSAnZWagAAGZAQAIpDVnNnkaseHbZittC5\nkxqYH7iAoc9wI63CYKPGOFGngOPkwMNS2DFFfUeDoqAJa4AV4S9YI7FXCXAh\nUj8Nat7IkPt63ZFj5yEWw7ViQsbDm71Z4aOmO/0KrnijQTOA3GhYQnioNs1y\nOc7hOs1HwXAlLAaI9WYd86JJk5HBd91yBR9QrEfU5X75U1LYhxzJLPr8DBzA\n7Tnr7Wd6KbFk3Y93YsPZstyZQpCO+0VZXOrSLpGAKuySHsSisPsEPHI/n/9l\nzlqqhqv6ReIDlSzNH3OjMx7z6XnKSgNCJxfmR6H7ggIhytkVAr4KY95Oba3C\nYFrVNe7RHf6FPAsB5HxDbIqiPE8puja0JLKaB2YLbZxKWhf7a4SGx6/UY3lw\nqq1oU8gYVbJK7cG3kQJQauqgqDWmsAnl0iukai7gKEf3lea0wEJyoVkSk4K8\nu9qNVXy6XCv/ajFesOjhRosz5QIGlwR8rT9KC2zVNjPzprEwGgJEfgdqCoQY\nV8whGsvb+JeMGWQn/ksSFKC3Ud8/rDvs0DG94gsHozwGNA8Ugk3OMac9Yorm\nKtLqBsR+eXv0yLjX/iRQERVzL5DSxtpGowRDtZwEc8Dss5+hzSXM1VbP0ykN\njK5o9nqEtOqzqDQh40opQOiRlt3M3oYz6W+yc7PytmmxvcVtpC90QzOLLaEe\nLdeB\r\n=eoJd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICDJKlPAyaJsxt0DlhhCoRXZb2hn9j6N0Y+wgiFdgRauAiBQtTvoMACfrH4uo0exXNu4al8mM2yCcXWT48QM39x5zA=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.24_1603452789683_0.3375300819192377"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.25":{"name":"ipfs","version":"0.50.3-rc.25","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5890+94df21ea","ipfs-core":"^0.0.2-rc.5890+94df21ea","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.59+94df21ea","ipfs-http-client":"^47.0.2-rc.25+94df21ea","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"94df21eae28c3a87bcf57e168b1379edd4674cc9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.25","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-xdpkJt3MP7r+yhIrP0QgvDDstBE6ZshmUix60DTW+wh+GbXskMkF//0xuyHTKA+U9AlRxxkBEe+vL9Uje9FtVg==","shasum":"74bafbf5cf238a52d3d88199a33759603021f42c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.25.tgz","fileCount":12,"unpackedSize":2084132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfl9IZCRA9TVsSAnZWagAAXyEP/ibB6wHqU2oyXfTNFyud\nBrlVSjX1347/Sr2cg3fGnHBG99vuoE7Iu4IY13mtQUI1NlJFPgRWNw4EddIm\n+GOAy48P24nNzXdnvPgVpDDKIMhUMtwsZS2Kzn4EFTWCTmCrxJAkPSYPr/iq\n9VQxuKZ5CyBNaCwBybJD8m474W+pWCrXlWm/mrMuIkUEteuTm3T1k29K+h1S\nvVotaLKfSe+3mXVB+Kze45VytxFC6qxCJc7kJaCij3aaBZ+UHwPTtIn6kpww\n8m25DJuWmZbsibC9RAskmCSaxzxuwWYU10ffTsuC49DrE6DOiMQew8wgTH7D\nl6PQypYYSIMll8i656+8V2HLa7VWy8GdM5F5zLCFe5C3vQNejZiL8t8YrYw+\nBQMQd/q1XeI4uwScJKJPDD6fIcqAQxZOfe0Kr6dPUmB3GsuAqLz/z+viLQfK\nSIi7Fjar78zlVVgAvlNPhLS2jjgjA8k/SUJqdAB5mdqSM/0EWD4LAbgrABkd\nqEKw2KYlcK/akfSHRrsF3KhRg7V1N/j9LqffLPmWgzxfgIENyKBRvYkA4k/C\nQk2hdAJl/2Iyf7n5OUoQOD+AizPeJbDe8uiHPJTymeew6jbwpH6kA1pgl2hJ\nSYoadCqJ4p+5GIvegLSh/cv3OeZExqY5SlcGq+4o6my6b8LNQA8oJ9YIHdF0\nmZfN\r\n=ZSBG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDXPN5AdldlZnsY5S8TISYq1Xn6cwikLaJG3VGJaVp7hAiEAjG3k1rNSmCdn8TEjbjFHuhjYIt/L2fYxr46vX6CaSAs="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.25_1603785241086_0.602399951646462"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.26":{"name":"ipfs","version":"0.50.3-rc.26","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5891+467adc3a","ipfs-core":"^0.0.2-rc.5891+467adc3a","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.60+467adc3a","ipfs-http-client":"^47.0.2-rc.26+467adc3a","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"467adc3a3746f1c554616fbb4b79b1d62ddfcd35","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.26","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-Au1AdmAY5vEjmc9H7AIaGlmrAYIt1OHrlT8CqFNhHZ/Fw92J+SwenZcQFrOSY3sajnlxgoRot082WOn5ayxnjA==","shasum":"f72149b4995a65cc1f96ca1a81e3e72fd244414d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.26.tgz","fileCount":12,"unpackedSize":2084132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfl+dGCRA9TVsSAnZWagAAP0sP+wezET91Ay+/yw1q/twe\n/T7eqsrNyYlDFw36LeeLSS9oETRXxY0Ueh3j6dfAGi++/VYv+BQzlWb0bbzr\n+U+6W4mMGPJS1+hzzLLvo9Fcx2hKlgC8n9jIXrDmmaGZL3Zi8ID2oqO2wBnT\n0O4I+tQsRWEVm/WqKTnteo0grwgalL1HHeCXMYq+NXsC3lUrpYwta9EXumps\nSR1fLamRoAdfKEMSDk4p76+Jppn1Qqf1T8woejcjTjvA+n1UMSkZW8READw7\nmI1P5UocAAsZaKGGyIF7/8prIw8KYJ/SE3RTKyjte7TF9AgcQTIyXHGnsegm\nKrZy207j5MTArdZdNspBeRIZrXb3TOtG/Kadj8vtwyjFt5Zuyy4fr7H+3HCy\nwrzN/cLw43o/yttjWALLEDLlz6qhUPtV3Nxjd5i1eD1MZ3gMzEt6r8HJtEXq\nNeONCPqVVAuALAtbt/vc+6LYUgeyhmuCxSjNBP7qn9SbA+UCVlIO3jDGs+RI\n3WKElGBvJJl3TWQn8WQnr819GegHvjiN7iFOuHe35mZzrgNJQLHyWu3IMklz\niaMUbwJrWNT0Y5mT7pnMLtSVXk+Eg1oQbbRTtFPUCr3d84jHijA1qEa8ppfj\norwCgam9Cwj9hvZzvfMr61kIsvL8Gwtqe0bMz1tUVCVyYaGQeCoyj/pJFPuF\nSsyO\r\n=Z/92\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyplQSdfzAfWno4sEn1nL+NnuE7UJfW7GKpyyGMztFQAiEA8nsJFfzgBF/ar0Ma/TkhS2CAPkO0AsgLD2FZ6AfPFBI="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.26_1603790662406_0.6115622790112314"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.28":{"name":"ipfs","version":"0.50.3-rc.28","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5893+345765c9","ipfs-core":"^0.0.2-rc.5893+345765c9","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.62+345765c9","ipfs-http-client":"^47.0.2-rc.28+345765c9","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"345765c9287df55deb215c772bf0d863a205b116","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.28","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-fVlruWkikkcBJ9r3TAnOX5EDScR3I2w0FkDgQ/pO3nZcyO48g7uCFtnugs64Jb1XK1ux6eY3pAApkorXrOfkYQ==","shasum":"0acaf4560807fa07729c869c5681f78db4fc8c70","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.28.tgz","fileCount":12,"unpackedSize":2084203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmB3FCRA9TVsSAnZWagAAFHAQAIGkY2HijTzipm4IVXnL\nUNuSbSShp63iTqsQ+4xaIXoMdkeTtqw/d8Dxc2RXVO2+gEshGUQ3R/a8OxCy\nHG3rPMRCbFcU9HJfGVZjha2+DxnJr+p8/O5F1Fc+zsuwRsqzz+gMZzdI35Fp\nnmiEVueQvUKQwQcqEaEJ7pdtaQFVhveCV85EnsU8Gw71Yy8tbwFdQ2GNG1kt\n4fGy8jZonYR5nzD0YeLzi+KXTWcGuRAAHptcBrWl5nDrjVz2zNnOoQXTa2R1\n6oOLUESdHFTDAPC3aoncflCX10jdXx46g5gB20A3eKZz5A+BGUv1GtpQuO3j\n0/WGaojp5OOiBpnt5TJfTLgVlB6WX238+eEfaW6SmvbnN0xATwFtJ9LryYqM\nqDuXuakp2eIQizPcRnjD1gTFuF/BVkRgTr5isvJbKjoQFRMMrP0YHaxm+M/q\ntl0YWp+vtFqs/0Tnxz0VrJ4kcNSXxv3kZMxgD6BFyw0+9NtUnYrTx1t6CWlR\nOYJOVB80FvjybzS65gL61i0q5z5qvLPiUW2QXP1c1hrSGshC2w/TVPW8/XgP\nmLxAF4vI58a5gglW9poAj5Od1rDi5O/aR5gwcjq//Mtljyl88PntqNnZjPqb\nspYcdmJgNHrT7t2cz96YB/fTOtZPqoczJpbEQgYXk4gbAPwevPOyeqFaP86o\nkddB\r\n=DuYO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdCbdRQG+zM4V2Nl3tSnChRaezbsqleu94EAsJNpKAngIgevlxi7mRd56gw/umqgHcVMYBeZgr/93rsoXXB2eZQyo="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.28_1603804613231_0.27862946537099287"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.29":{"name":"ipfs","version":"0.50.3-rc.29","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5894+c3772b4c","ipfs-core":"^0.0.2-rc.5894+c3772b4c","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.63+c3772b4c","ipfs-http-client":"^47.0.2-rc.29+c3772b4c","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c3772b4c91855da1347eb954a5cee186fc46a562","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.29","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (linux)","dist":{"integrity":"sha512-vlPM7t9lvqpBlEtiMkptZo2oDqE3QihJLQEkeiHf7CnPjqshIO8SYxBszbJ2vGHkiA8KN+0BNrHMZMUU1ehSpQ==","shasum":"f92d142a54a5fa0ac67eef37a8ee7fece0b8c586","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.29.tgz","fileCount":12,"unpackedSize":2084181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmDiVCRA9TVsSAnZWagAAZvMP/jK/BddnwqRihIKvHBVA\nWeDVsrMQaRaaebKgUVqPvOLOsCV9kKcVRXkFzS6MKOYtRWSycovqZpJQ4TY3\ngHsUOZDeyJMUBTwQ121NW444CLuFaqXK8kqeKd1F+oXLORPUBakilWMe+WXm\nKhVnvsKwKwSvg8HPVi4b5daUhKA1kIbIUGTQeXK9Uom+0N8PphFAVqcOo2Lr\nvrYsGEVZWLpaB7bkcKA8FoKbOZhof3H5weiJueh/iZ4LeiCCqoHHdGkRkfiO\nxail9+CZtbEXpVBV0UdkU+C1UY5iYUrN61iZEzPPBKbJeTClcjpEsq2l/c+i\n5b2VswHGupQckB5jU2vjKcMm/znjJv3ErCTygoQqzbREBpqt9fHh6HtNlzTk\nekZKB+e+vhSPtCd1T940lUItpcghJFPqRAYlkeuVlh7b15MTvjK27qfo22l8\nYIgdJNP41QIGtRguvQLh0s/aNaf/L4s62UZcx6RtG8vQi4e3Xmy2WrZIidIf\nJzQbjSujDxvDlk0iRp85I6XSQj7E+7cHmJA5q7rsCYuT8l0KBWGHQEikI7cK\nWcUDwVDEGc8zIihU56T47TStwLTkYcGvc1FFyQEyqGVrCy4UaxnWYvaTR3BY\nj+rDP3QRfpEv0XpInSu+axm3Ak5hb830E1vITiQy+dm/BSkIRLZUWQdqj8/E\n8r7P\r\n=XKgc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMWzy7VDVKQh2jv04hJ3nuSMJyBzdZ3iuOX24KepzmQAiAt99oAsfUQsBmD9d3IQWbj77v7Cj1cekbEkHAryoWrWg=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.29_1603811476906_0.09421943657077492"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.50.3-rc.31":{"name":"ipfs","version":"0.50.3-rc.31","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.0.2-rc.5896+70196444","ipfs-core":"^0.0.2-rc.5896+70196444","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.140.1-rc.65+70196444","ipfs-http-client":"^47.0.2-rc.31+70196444","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"70196444f942cec93d00e8feb637dbc79d5fe37a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.50.3-rc.31","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-hD5cur/MFukoQ+GdXtFOC4JJi55NnnEOLrXTHQHDg60rd75BM5r8thbUNMiXAMe6IcFALemg8AiAsqsJt2mGQQ==","shasum":"23c17b0d107f36b708863c3b4efd85a3387eae5e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.50.3-rc.31.tgz","fileCount":12,"unpackedSize":2073455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmYG5CRA9TVsSAnZWagAAwSQP/1EnCtsH6ntpto3d8gYH\n8ubGzcMZhqUQI3FXxTSBADImFrSgkijWtXI5Tne7FEHqGq+dRMmetVlnmVL1\nsl/nxvdjr66g9EGNCd3n7s/dYR1z71dAfblGMnpJDiAX/kuFrI92+YpfQdge\nl2MhaHzrU+aY9V7QnhdXeRexMRIU+JIuuOi8I+BSjade+J8woaBUa6vF2Y7i\niBBIMT3sPEz7E5g0SwU8gJEKpKWvPEtsfwZVRP5cDfmyHo7LIKkPQ7ahDDWb\ndG/8tn3eZcXSjzCxe86tYiM13OHYZlxsWIDDmQ9G5Nb7Sn/GWxWAv+SBdruS\nTDrKNdBYSegw0hIMGOTdBiMN1I0fjEeNh933yCyGlFbbR0cqUR25U7fNFCtM\n6PSdeOC6QGGJzdWGR8Io5dkpFERpXnDytkGKtVFAylWUZrFOsv8fXYoN06rK\nl2nR1EwG8JXD+7vOkmbF5y1oUxQLA6E3/66wm0Lw1k4KsQreDh/2Gs0wsGtR\nf8WYxE49ln/ofhTvq49wcuUvJnzVLj5wqf8/8z4utpnaO06t542RmN2MEVvy\nvPWLOAfwpth1Hh0aebkfNvKZjzpfNFuXk2Qck5pmYBCOX1TLqmI+cqzb9Fc9\nmq4v9rlfWqWLS43abGM4SBVbeJDlGcfkkh++USeOvVxRoTcd6EookZEX447i\noVAy\r\n=N7oR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGGti6S1jQMmmgfElcvEG2UdjDQKFL7B3ZHAvj5aWTDIAiAt70bu/vIRzni6xqjxdX5WSUipEnrc22duAqWIBdANOA=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.50.3-rc.31_1603895737193_0.8755345662155303"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.0":{"name":"ipfs","version":"0.51.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.0","ipfs-core":"^0.1.0","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.0","ipfs-http-client":"^48.0.0","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3f407ae0b36d6f7d2804abef956c9f035f3d298e","_id":"ipfs@0.51.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-oy3+huiSgXV/W/ygQYsjjiMU2cAN7GcJI8SvKSU+5gRLL3AZ+G9iCH/YTXxT3G6Arw1KTytlPsxmM4XB1EOJ/w==","shasum":"03674a06c4bc3ca4459feeb4606d109839689f76","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.0.tgz","fileCount":12,"unpackedSize":2074857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmZPRCRA9TVsSAnZWagAA5YkQAILSDru8aVvfvSavmqkP\nd5KPetzzTBusXjpT2A+ptGGtrTZ/qbMI4Z8Jx0/l3rWDuGxO6n6KZqWZNGz8\niPIOAvbYoteSD0aggz/z30xOZse6cGU5FMGJZPC24Xb2Z714bJbJIrH0Ei55\nc3YNyamEmwdAAxD9psPs7rbPAIFEethAcQ3nVtloQi4fV4dZkj6l4nbXEQb1\nDLQSeD/FxGSkOOV61H76/vN9fG0Ja446Gwqrmw4WHNUZeD2mWCjS2w5qPsos\ns9ipbYXpZ9jYkxvzR3YLnbbzwMO19v4mDae4SS4YeYemiDXSaR2W/WVjmnQb\n8eG3U3TFfmyA9+xQc75V9XEu/I3cDVHv5mGOd7X1sES3Rz9pkG5i43h+n0pa\nQO/DdKlPcBScYzv0Ud1NZE5hvcpeYlDx62Go+YuP1w+nYhVqIid7xB+ZebU0\n9rhLu5E2K10HbPKDudT4/i6M3WbcmcUF7oFZ8JkDB2RwrBUqQi7hFi6d1/SW\nmLJ8dcrHPhuRwIimTTZ+tmX/lEDWgPM+vvtuFMbMd2bX9aRHMyzVr1Ft8mq7\n6cH0CUdGWj0vJF6f5vKR2mvQOoCnLX0D3/8z/JGqUawBakwSA2VUD+ctFfyF\nG6bgY4hxhh9+KFNqa3n8ASNVhA6bbzqRglzrxG6sb2x6I+9M5A8AHvwB2GKG\nGp8x\r\n=v/h7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBn7XKBpPL11s0nzamO3mmuNHjGzf73Ra9OTF5n1XsfJAiEA1vTl6sX5DMvMnNe4oDMY76XSNUhKtxonBtJk6ufoWc0="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.0_1603900368469_0.7493285829762473"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.2":{"name":"ipfs","version":"0.51.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.2+097d7cec","ipfs-core":"^0.1.1-rc.2+097d7cec","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.2+097d7cec","ipfs-http-client":"^48.0.1-rc.2+097d7cec","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"097d7ceceaed9fa7983bde829f90066676b664b4","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.2","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-4NA8lQVlt9AyWPOEoHe1XZAjeIELOoFUo4vG1OLgqJdXsoRhEYCbjkelUYBZskyuNSefUXYtGAPcWBGpWq1E1g==","shasum":"730eb170fd4d5b5bbfeb5766302517fea0ee1013","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.2.tgz","fileCount":12,"unpackedSize":2074872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmaVsCRA9TVsSAnZWagAAYToP/3KzRsMISsr5RwAT6Bcp\nblmwfuBopAkY38VZNo/yybM/DwK8A6lgoH8yeFThQUIZYIfVlyfD6CD1R2OH\nQQaVmd/ybN5pi42L41RWWJcHGkY2dPbXFrqY/D4T458b1nm7bPHIuq+dWgmt\nl6fdeZQX5hzAgyIQTbVKTYMag93e7CGa80QgyqWUb6dB7BVtN0oYvjpJvrhZ\nJfLJNuzre0dASe/4i+zkJOS9nLPL1K6etOevdKk0AMLAjoQwXLx6lzjhIK5S\nmZR51HMNza37YUQYibRndenjZOoiwJ0QsFPdpk2G0ZF6bWNZCWiwg2xLB7fq\nvYv1nJfBalXfDK85zpQHaRlaFC3mH4pIyfUZBR31uyxhYgdci1v0k5Ksyziv\nm3ktYhprgtkJ7u34LBBy9HotahRpqiiZXiN3j2NLA/OxG33QGq/vndDqPhVM\nIccF+fpQ6O46Sw2loLqSmcWvAZVyQLs0mEN6BvPfLd9tY+3epil7f8QAWJu6\ny03tlb3qCEnsyN8SrBC8WOPYWwMkM5VbLZyB6V/Xkt6uAlOnaSiRvTdSXQXT\niDH/Nogy1Yy6AS+C6iV5jthLaBYO54LkMQwVpXnP5xNyxZgS2JCQvxFtIaqk\n1tS0G3QFVLQjsbNgtl/e7vjieE6l+rq5bK17p3IK2yC7mCXehADRYStoFnWp\nKF7f\r\n=McXq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5WQyPkWtqlKx6bDAzYLNtlB/tTWoGh1EENoZh/RJ3TAiEAyUwPO7q5tDzrGSB7BT8S81/fGL9uWJjpFRKJn0PUaNg="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.2_1603904875358_0.41234434552136623"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.4":{"name":"ipfs","version":"0.51.1-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.4+c4d7505c","ipfs-core":"^0.1.1-rc.4+c4d7505c","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.4+c4d7505c","ipfs-http-client":"^48.0.1-rc.4+c4d7505c","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c4d7505c6c5a2fbedae72d9047f1363747b4c2b0","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.4","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-P6ccK3AWTW4EKrGZhlfuW4Y4a7TT0wMjzGFRgMAA1rvoeuPfkWrRFG51KH5XrL+vm8BxQf8OhvW6F32YvkkWUg==","shasum":"ccffc19190ceb47b9f9ac8417acf15b2ccdb85e7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.4.tgz","fileCount":12,"unpackedSize":2075150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfm/mYCRA9TVsSAnZWagAAyDIQAJjQQfvb+fTBxwQukzAe\npWP1voNSHsgqASocdc8jphMrOxRxSpdYF0BewdFybr22t04v2yWMMufkpOAa\naXp3fGKnezmnM1/IlAjJiMMXyZL4tHg+Nuxjp9oct1Obr2zN7kM3W7p2HcoB\n/n7b5wM+rCoO+b0TgnjSoyIYRgSpfT9rCt/Po3Vg9WfX5bacZb0BSluPkeVf\ntTvxR9uGz6KS0lYGxMWKFn5XazC2o6xP/dG7uYdgtRq9rXLv8LCXKJ1YQXDo\nf1yVsg+xlSBpk2KeboGgPSGARueHQCwoD+0ayubrtmlMak+DDjrFfE2fmydg\n9Ko7i93HvTu+K4V/ao/sg97StPrgP2NC8kjc++2Iv0/XPsqESFL2TsdaAAzK\n79zST+s5+gGzj2QbOwNTIb7tJETVN6P/5HW6nA1sDXFH0WGypjKMA+K5qsA2\nzW7wLDXkTfnGvoUq6TqlpK12dtiUor6jap8jO7FYQg5Ak44/M1D0ckgqTJku\ns+2zf2NFcHzhsd3xuOvc4mXZ7KNf3l3yt2pP8ErW+zQo4lpRPhFh1FtBcHVc\n/ungDFaZ2Jplf3HmUKsV2qJ09QJF1FEup8I3yYyjAwdk6fTcC3mgtS9LQIlS\nrzohlGo5dxcUP+AiD4YOYu+MzN5gtimyjWYoOlIUq0+dGQ8hfJv6WjADE4CZ\nMS/X\r\n=RkNK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+raZoDeSORbe3fXS9aNBl76yQan5OvUZLZkcpxJKX3AiEA952fY8QAPRFUSRr/Ei+gA6NY4K6oo698Ewq1uHhLvfw="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.4_1604057496374_0.5392384527063334"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.5":{"name":"ipfs","version":"0.51.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.5+bd8708ca","ipfs-core":"^0.1.1-rc.5+bd8708ca","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.5+bd8708ca","ipfs-http-client":"^48.0.1-rc.5+bd8708ca","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"bd8708cad08c9723c3c86457ddc14cec84d1793e","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.5","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-8OQlS124wdyBG5yuKRXkZ9xjeflr+FobvTmHum2XSyqdUsA8O3QHa6EKCyTOF/9XxOUo2zVF/uSENGaAD7mKXA==","shasum":"9600ed8ffc9485475f1738d56ee96ba6605902ef","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.5.tgz","fileCount":12,"unpackedSize":2073341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnDLvCRA9TVsSAnZWagAAiRcP/39oXfwlZp1Pzp41P2mD\nQD/5ifeoo4FaZGnzpdYMLNOnm9lPlmlknqdeLo4VErcW3T2ngXdOnP+gfvaF\nLf6+9xF7VrM6dRZlaESWzibtm7nHU5WDTa2+wLEZN4tEf6iSiO1a9sOgyYuS\n9FLGSDKy7XE71KGjGILOYOxIkB2gFSj7drilV1talhO3AdWYE3FYZdEOGs2f\nfPEc8cm0/hfc5Jwpo8rXLCFqpbpLu+y98a4MDq9laUFaA5782ZROj/Bw05P/\n/rti8VBmAAm/BVxIGD5J60+ftgI5GuEm+yJKOwcL5k9djGZsaBnepjLZV4/P\ncSkrfYs7BJiMnyT0N/o0O2bRXkcNEceiPVSwp4iAyj0V6hqM60V6SlfixvMz\nBDRal+H2Ag9mFU2nbNrKF9MjTunpVwS7KwkrBrHZoBVAgunn36EufkilyXCk\niii0puNdjNroDDgyJbi0oSG3Nr2Lp/TZ09teGbSlr3Tz6L3ncGZ9U+FcOzeU\nvyzqSA48OCdYYMRdwt7AvHdjfe1rAxueexbfVBZvIkqiCozVDunkVXl9iO3I\nAlrSlQY6GEqx4f9i5HzXoH4GAUMsbu2RUdT+PyRIqDf+og19XNbu3PU7CU2Z\nWLjegEPt8YIQm1WqxE17jeez7Ilb8TVruix26+9ZAPVPJxLyXE0Ji6vyw4qG\nbaQD\r\n=PBE5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDuosCXxcCcRl6Z6MvUU1PdXTP3utv8mlCjO5tYUTQpQIgWtqD30dgXdRkPsVKK1NpW5WVdG161waBvZPtvVPNXJ0="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.5_1604072174621_0.8572053637139465"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.6":{"name":"ipfs","version":"0.51.1-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.6+059520a2","ipfs-core":"^0.1.1-rc.6+059520a2","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.6+059520a2","ipfs-http-client":"^48.0.1-rc.6+059520a2","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"059520a2a3467952650dc9f45d8df790251f932a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40 to 0.48?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n## Getting started\n\n* Look into the [examples](/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Read the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting started](#getting-started)\n- [Install](#install)\n  - [Browser CDN](#browser-cdn)\n  - [Browser bundle](#browser-bundle)\n- [Documentation](#documentation)\n  - [Getting started & constructor options](#getting-started--constructor-options)\n  - [Core API](#core-api)\n  - [How to run IPFS in various environments](#how-to-run-ipfs-in-various-environments)\n  - [Different topics in detail](#different-topics-in-detail)\n  - [Questions?](#questions)\n  - [Need help?](#need-help)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [Packages](#packages)\n- [License](#license)\n\n## Install\n\n```console\n$ npm install ipfs\n```\n\nIf you are planning on using js-ipfs on the command line, install it globally:\n\n```console\n$ npm install -g ipfs\n```\n\n### Browser CDN\n\nYou can load IPFS right in your browser by adding the following to your page using the super fast [jsdelivr](https://www.jsdelivr.com) CDN:\n\n```html\n<!-- loading the minified version using jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n\n<!-- loading the human-readable (not minified) version jsDelivr -->\n<script src=\"https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js\"></script>\n```\n\nInserting one of the above lines will make an `Ipfs` object available in the global namespace:\n\n```html\n<script>\nasync function main () {\n  const node = await window.Ipfs.create()\n  // Ready to use!\n  // See https://github.com/ipfs/js-ipfs#core-api\n}\nmain()\n</script>\n```\n\n### Browser bundle\n\nLearn how to bundle IPFS into your application with webpack, parceljs and browserify in the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples).\n\n## Documentation\n\n### Getting started & constructor options\n\n* [docs/MODULE.md](./docs/MODULE.md)\n\n### Core API\n\n* [API Docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)\n\n### How to run IPFS in various environments\n\n* [docs/CLI.md](./docs/CLI.md)\n* [docs/DAEMON.md](./docs/DAEMON.md)\n* [docs/DOCKER.md](./docs/DOCKER.md)\n\n### Different topics in detail\n\n* [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n* [docs/MONITORING.md](./docs/MONITORING.md)\n* [docs/DELEGATE_ROUTERS.md](./docs/DELEGATE_ROUTERS.md)\n* [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)\n\n### Questions?\n\n* [docs/FAQ.md](./docs/FAQ.md)\n\n### Need help?\n\nPlease ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## Packages\n\nList of the main packages that make up the IPFS ecosystem.\n\n| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |\n| ---------|---------|---------|---------|---------|--------- |\n| **Files** |\n| [`ipfs-unixfs-exporter`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-exporter.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs-importer`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-importer.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |\n| **Repo** |\n| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| **Exchange** |\n| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block-service/master)](https://travis-ci.com/ipfs/js-ipfs-block-service) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block-service/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block-service) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-block/master)](https://travis-ci.com/ipfs/js-ipfs-block) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-block/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-block) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |\n| **IPNS** |\n| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| **Generics/Utils** |\n| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |\n| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |\n| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |\n| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |\n| **libp2p** |\n| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |\n| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |\n| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-noise`](//github.com/NodeFactoryIo/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/NodeFactoryIo/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/NodeFactoryIo/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/NodeFactoryIo/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/NodeFactoryIo/js-libp2p-noise/master)](https://travis-ci.com/NodeFactoryIo/js-libp2p-noise) | [![codecov](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/NodeFactoryIo/js-libp2p-noise) | N/A |\n| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| **IPLD** |\n| [`ipld`](//github.com/ipld/js-ipld) | [![npm](https://img.shields.io/npm/v/ipld.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld/releases) | [![Deps](https://david-dm.org/ipld/js-ipld.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld/master)](https://travis-ci.com/ipld/js-ipld) | [![codecov](https://codecov.io/gh/ipld/js-ipld/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-pb`](//github.com/ipld/js-ipld-dag-pb) | [![npm](https://img.shields.io/npm/v/ipld-dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-pb/master)](https://travis-ci.com/ipld/js-ipld-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-pb) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| [`ipld-dag-cbor`](//github.com/ipld/js-ipld-dag-cbor) | [![npm](https://img.shields.io/npm/v/ipld-dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-ipld-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-ipld-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-ipld-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-ipld-dag-cbor/master)](https://travis-ci.com/ipld/js-ipld-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-ipld-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-ipld-dag-cbor) | [Volker Mische](mailto:volker.mische@gmail.com) |\n| **Multiformats** |\n| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Deps](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihashing/master)](https://travis-ci.com/multiformats/js-multihashing) | [![codecov](https://codecov.io/gh/multiformats/js-multihashing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihashing) | [Hugo Dias](mailto:mail@hugodias.me) |\n| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |\n| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |\n| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Deps](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multihash/master)](https://travis-ci.com/multiformats/js-multihash) | [![codecov](https://codecov.io/gh/multiformats/js-multihash/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multihash) | [David Dias](mailto:daviddias@ipfs.io) |\n\n> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.6","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-2AtlWLv7zpBxOcgAw1N31kgxnmBFjUCbRd7nK7FVvaLcOjzX/eomSKsRtYS8bQaRjoBmWXZrnkHLesmlkLdRzg==","shasum":"7de27c32415cb8bd1285dfb9d51ec92baa2f6041","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.6.tgz","fileCount":12,"unpackedSize":2073415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnEUyCRA9TVsSAnZWagAApGAQAIhZSpG4rvVnU24lucRN\n/fWzJ3I4WIGFP4nf0VETKqXz+RL7IKxlJD797GtoFDWJZPiuArOzQsXP8bZ0\nmtMrsXrMQWbHXYgQGW9Y+818pGDiueAAP0FAXdJDU9o2mcDpjVym8llK9NCE\nFBVoZODxfD778l9mnpV6X/EhwwoSXap9fxj3Xaj6c6KoTO4DpiVF7tjuMSgT\nWR/RZ0N3KM5yvCGLmHBj8pE6FnI+4GmX+/tvkhvFwlfnUbw4z3nv/c1SfWUm\nKKsRXNdNM7ZXKqL+EVBFrr+jbt/I/f0qGrjxcJ7vbNSZSr3CAN8+k7BdGT5y\nLDVmECNqMTHWkpoFA1MNpEg//TIvh0ri5F7qC8e8nm8i8fUCTnBgiYBsFQf8\nJ5qII6miIq6828AuaWuQFCwpTqOAvYLq2ay+pw7mDwHI+yBFkGkHTUKI96i3\nM7eLhNceYAOoGQpEt/hhcH0x6Mcva3r8xgFM9T5n872l4vU7zoWtRZjIh1fN\ndYCsm5fFvzohPp/s90s+IDRucGt94aZh6nuQfsj6tNtVLQA8tg+jO9O4SgjG\nyD97QnA8NJXL4T0VelhBBnYSACQ+HW/Jz/stXgu6tNPmtEcbnB7F5GVW5JH2\n84mulVzUsA+5s4ZRwScUqT4w9sIn2C8xERVEvLDOqEesjvG/fD1RRl0+61w6\noix5\r\n=QoVM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAIc/49yNGpDfZ5O3ZfRgQYgo6OSoVAun5WSqdouOEOZAiAlDDbAQHiNvpJEtu9ZHKVwz9LqK0aMlm0T/YYq7n5Gmw=="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.6_1604076850150_0.7187787622148627"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.8":{"name":"ipfs","version":"0.51.1-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.8+3d2d63a7","ipfs-core":"^0.1.1-rc.8+3d2d63a7","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.8+3d2d63a7","ipfs-http-client":"^48.0.1-rc.8+3d2d63a7","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3d2d63a7dbb2f5870e26620ce1addda9dacad893","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.8","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-Ep/8DrI4uukT+1O+MB27dZ9x6Aq9V4pa6usAFzZ0AAP0n6sqYeveas7LWGGbu0zrZA3ANZSUnW0GlHhGC9gVNw==","shasum":"bd6c29b5adea367fb34abb69ee2e640f6016f754","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.8.tgz","fileCount":12,"unpackedSize":2049117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoA9BCRA9TVsSAnZWagAA5m4P/20YVq6RkurRTf0tedwc\nHjFKcR+ugIK5J50qpNpx4SLCH+PNRDkG2zfFk5y9d+6lN6NAikloYJkiz1io\nV3s+roW2+/WUgFSGQ+pCsII3kWFrZwbmjaUwjTPLt4iSbR8GtqyH/DB7N+HZ\nL7k8Cd5iw9PDDCE1i3jb/Haco3R/rxuICiBAg6GrROYdVL1YUcEm0wLhvOIM\nLLtZCo/n4cQZlZBz9jxKpcmqIp/n1SyAAWQ8nnv0z4gc5MJ50BHnTMcXh5tG\nFiiqiltVmRbtedd2NCqIUu6tq1HrmgWJWTUb4MJEMN9UoiU2I7T87yqVuXR2\nXUod62lit5oVCz1gzf1p2QIO9B101jxRnA23k9CkyGbWKnOAwi4rL723aY+L\n1JAtC3tlKvMzykKIAq6hzHradrhiGvqrBZNjtLApyq1m8apLy4WbqxcBKEiZ\njZPL8w784Vyq5tTv1gQVYGzoDpbUF5+QjEdyDQx67nJpgeEzLrIsn9XA0sPd\nTPkzHwdKXuOBu37hPjYAn41/s9GwApXghbR+Vj+qtJ3U1j9gJgW4aztMIX47\nEWVcry9SQ/54c4DzOfHA/D8Z7ZjkIVnuwdpaahXhy2WD40pH0U/WBe0S9rVA\nZ0i1x9bFhMoAPWL+aNyopS7jSHbyLDWTfIll20AWHxmn4EKONYItTyIrx56S\nUCD8\r\n=DHct\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGkWPpRLS/pWN9Bw7mhHo6Hy8JVrPctYMZuwJBbtMDamAiEAyq3dwVYqKAaPo5u/xlM84dJIIZYFarL44QwM/9+YpKE="}]},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.8_1604325184478_0.25106252392647943"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.10":{"name":"ipfs","version":"0.51.1-rc.10","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.10+02dcac1c","ipfs-core":"^0.1.1-rc.10+02dcac1c","ipfs-repo":"^6.0.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.10+02dcac1c","ipfs-http-client":"^48.0.1-rc.10+02dcac1c","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^0.4.7","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"02dcac1cbd713706f6d241bac4c6c9a8bf7c03b1","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.10","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-Zw8mTolAKJFAgLrOL4bDF2d7t33xBOPBVK+ktXKVbUszgUO33sHnnZxW7oaFU54C2NAJli9VvQH1INiUfb9aWQ==","shasum":"2a9acab7f3f8754f514df969c6b886d43e71ac07","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.10.tgz","fileCount":12,"unpackedSize":2055808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZVzCRA9TVsSAnZWagAAWjoQAIOmJ7HPfuCoHt0FA7kd\n757HaN5CrlZRN6mdW1OlRhqlof1G58fWiXM+xuUXQik8gmMvu813OiimfOr6\nYvyvWXp0h8Ss/t4IYjZhJ1fkS6zy3y6u6wpI7z3bJTbP5+gPyNiEeDC+vB+R\nqbF6RPEJ+uQn+UNYKbMiM+MHdIlbrWePvIk84bnvox92DXNq/CPbJi685QV1\nJrp1piLT85sJSxLYPkDHsut3S85maXi69SxQy+77M2Sl50RXpX6hAIxE652N\n8Mijxz1A04KYoZw2/qpAlUFb9G4OK2HvfHqLNvfzCklgIvYrPBXqWeG8LuxQ\nXSnGCsIAbCnBMlhKnZWqduxE+3qeZM5PzJzjocIKWbNn0OtZ+0CjbhLuQrCA\nylgDwJvWsymAWC0la4o/zyVls1o7YTAV6Ator3RCz551oZZIEn2YCg+vFhLf\n2UosePgDHmjiXy6fjktbUCmM+sZWxl6EydC6NqaJkqLBV38fH/67sKSSWbqq\n3PKFxmz+EkPVxo2pEKM3tf76FGKPeObYH+sJkAKlo/boX3vnvZUCHQ+9LPGo\nKCLGIynf8P955wXP0jzUiIJpy//Z4XbzTN2DOI0vAhvtVAT5VisauRUpCSX5\nlYoh6djii0FByzlftUR0KzC1E8ZnmSUH7z0pRYPhHiow2dwEzw1Fvk6fHUbf\n5Tal\r\n=0Dx4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzoDWhMKa30jETmzcPCSn7NFB0aZ4vCEEHAQtUR6bsowIgGTmasUET1zN2zQlao4O7dzMVmjZvBBfxTdZmFoG+M24="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.10_1604687218709_0.6288339246922736"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.12":{"name":"ipfs","version":"0.51.1-rc.12","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.12+022afda0","ipfs-core":"^0.1.1-rc.12+022afda0","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.12+022afda0","ipfs-http-client":"^48.0.1-rc.12+022afda0","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^1.0.0","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"022afda0dd6c3825c59c70dbcff9af2a64a1683d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.12","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-DIltCTyZHhJFVe2Fp/prPsrJTN4OZdHQvIzV2QQjTRfdWL01BwYGMO0jR7owWb1lSgmT0jgmGFGomGaldp/HMA==","shasum":"0e908d07f5dbf3dfc8944647c135d89ebb6ef2d8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.12.tgz","fileCount":12,"unpackedSize":2065776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqWqBCRA9TVsSAnZWagAA2f4P/A/Jg/4BPKb7jHrRMx4b\n1e5532sQCPtSGGvUBF4DoiQ1hO1fwPFY/zghMR59qg78A/wyR40HNaJyPn6a\nSlYLTUccHYpgnLyH+ywcsMiYH7NsFz82v0ahjD974x/xHOTY9CGCuscJlgAi\n6/AsV1K+ckhVPPcKBSuoOMPeue482nO9/bRyxyzTGqiFNXcXbqGKlJfyDhQp\n2f66mspnOOq1Zj2M+tTD5PSiKguSLnv9G7V54sIg9ijjMZtlJuYoVkEckhdo\n0mKlLcFzVbF6CY2TL5rhsHij1sIbFjuKhr75Cm1qe4YQibyLjfquPAtiO96J\ns/06YLFfHbc0R0nuTMN2r1/+YZebDu/qq1O733/ah3US0vcU1Cj7rRZK1UHs\nuvHgkUM3eO4rGenE3XXqyt5Luyr2m412DcmNMCsYBgr9FBNzl9If3NKJ85i4\nfS8Mv/A9phiKKAq+ADbZaSoQ8AXMY+SPHOQNEhLG0noElUPZR+nX/T0yEQG1\neptOrR6ihBiom0iF+hkjmprelPLDj/2nGWuyPv7baqjZaiAo2jOmOT0rI36G\nAjCc7QfGm2S0tROClJ5P8jomyBSz5VA/YMHL+mUQ1NABSXP8atMTmI4uFuZn\nInFZRMv+sMaPYxurKyEmew1jaqocNx4tIz3UGT4UJffO6BzjNl1Rn/+uBycu\nuxvb\r\n=wOfC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmXjGRkv0M7gr1G5R+H4cIa9ithUPyP5Kp1IAiqeRGZAiAYF4uyYSEjwl87dRICMEfVz8YYzMSJlquH7tYaEz8jpw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.12_1604938368852_0.8660044323252483"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.51.1-rc.13":{"name":"ipfs","version":"0.51.1-rc.13","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.1.1-rc.13+d2505075","ipfs-core":"^0.1.1-rc.13+d2505075","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.141.1-rc.13+d2505075","ipfs-http-client":"^48.0.1-rc.13+d2505075","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^1.0.0","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"d25050758405c784269aa59537b6a49eb9106986","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.51.1-rc.13","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-i+GR0VzG4/xmOxSkuE9+UY5+vURMgfrmTJP4Tx0kQ6UkRL4bhX/cWFeTpE3rVuLHRN9gbRzfhyw1AmzRoPuGHQ==","shasum":"611bc6e0fdf002d201a3591b3928795a81de7479","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.51.1-rc.13.tgz","fileCount":12,"unpackedSize":2065075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqXRsCRA9TVsSAnZWagAAgukQAJPtCcswyVOgNC0xkp/O\nIoXxlvvoKF0uE4C2eDZNC68mmxxXDe4JidCVLYq6AbXKU/5LGSm1VztIuGiL\nivZVAbYaNCLIfswkmMaROqtj/N8IiC+Whp18TBEL0tJi/zzE8tf7jFsnVHQi\nfCIXwVhY0mTKCrvulAs1psQHbdVaSw+fuGYSHARbLcxnuR0F54AUj8Y40OWL\nVtkqbclpnyP2u1CD9UHGV/bLqZdQ+4DrbpRgOKlaadaAw6ZgtgIdB1mhNVJi\ngkTuy18xtePlValz2+WkZ9Auy/J4QJLItnvzOJS0G18FQgVweXKVHJdcMn+z\nrQYZPyp5ys7QlEcOvxFtAM9oB7dLedMOi0GZzeB2OY12NLrge/Ia//pW//cQ\n/BlRzOPcxTCv6BtvokSTjX/sBwfxLNZ/RS5TfNQ8orwwVGMOXsPDMH68ddh/\ndQiyOh1XmK6V6yuaps1OyKvV7Lu6LstTUrNvOPqg01TIREnAZMZnHRx+P3rz\nAloLQmciadcWVG2rME2hrxNE9gwwC9WkbJ0N3eqoT/TX2UTQi3ar8r8nWz61\n5hj3LKsbSiS6vbXArQZvnJXhHPySQ5p7WyA1imKPiBrQHVKiLUMr1Vt2CPGn\n0rCoNc6EKJHz9t/JWn7U20Ih53fSQ3PCYg637ac6fRjYoXLxDKeYmNbUZU89\no5tb\r\n=Zq9x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAX3eSyf11L+j3bn5XOQLrIi+up3M+0bzepGe8hfWDgKAiBwNT514XUecoBsIjco1rA/s1qbMRjTzjYATqjiM0d9hQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.51.1-rc.13_1604940907787_0.5053450096282326"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.0":{"name":"ipfs","version":"0.52.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.0","ipfs-core":"^0.2.0","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.0","ipfs-http-client":"^48.1.0","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^1.0.0","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fee87c5ed915f45535be1d36b3547f4be5ac0932","_id":"ipfs@0.52.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-Wf1aXjZEtcE1bmrv9kxizuTQkh1xFwPAen/IQScp50mWsUPCUGpoejnQAV9qLaggibqVC8kPDXdNBC6cOJlIwQ==","shasum":"a68b3386981e07cdd7162f4277909f53ffac5300","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.0.tgz","fileCount":12,"unpackedSize":2065868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqXfkCRA9TVsSAnZWagAA0vQP/jYH6qQSROD16pgE+AO6\n1enwgWXNWCIOvnjPyueWDKyfysnZQbf4vm1KBoCoIZeKaXoWs0jhuKJNZxJZ\n7LYysTMtYtT2xg+8SQtXJNkGoSHDhCm/c+AyXcDNSdK9nRqnzCv2CwzJh5zy\nwB9KkrGdZygTrU8cJy+JWZkVU6YThOl1nYtMrYx6aCXCTjuu+YvdD1UQbXG3\nedeuogNbk4rRPMclh58Q+6roFuYEvfoU/1vmwxXspA537K+fWDzk3UIKKM5j\nWleCv6lnF9iYLGJ+5D4vrf/dK/DIeztfqHrxjyQiAp3UAj0trtFinYozKBBc\nhTw+/TOJhEoIGJYf9JowGrUQqbVTvMGSjS0ilf/EkWL6cp1foB2tD9iWIiq8\nPsaval/l+0Uug13xlJ05mCvmdBb6u9ffd9777sjx/V8m4LrLajOSXteyikn9\npMzLJ9wdqaFMZRmH/mcKb02muN28NYqIysqh9BeaGT9jwpHVOnY5zRlfQON5\nkWKYHIQtNebozkrL5YkLnQgYlSPBST3yK2Yf/9MUQN189oKPvQFKEBnZuPY5\nZK0ZbauCc5CmuRKTb5DZnG34HEJwNRBcrFapY1CJngilgFtbI9PRLEpx/qZf\n5VtWZPNH+iQhz99B5AiSlr+iTCNcaFYzT3My4p9c7ArhvRypP2K/RTRPg0GP\n0CJT\r\n=2mmv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsK8LIB1w4NTipschCXuGakZhncMJ3+zeh950GHbqL7AIgRjtb9W4aUaAwdzEjVMXhP8uKwDTeOy7P0egFi/JnqDE="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.0_1604941796323_0.023528740605113674"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.1-rc.1":{"name":"ipfs","version":"0.52.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.1-rc.1+500b504f","ipfs-core":"^0.2.1-rc.1+500b504f","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.1-rc.1+500b504f","ipfs-http-client":"^48.1.1-rc.1+500b504f","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^1.0.0","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"500b504f363d72ea8c29f4ffa471b1cc30cad1cd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.1-rc.1","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-g4UWHOvB7+NxWxsgqE+5suQuM6da5yDsMFJeOr7pGzuH8N2MbZ2OCChp6Z7Xe5HHwekfwJL2bo9EEQYHbByYEQ==","shasum":"43488d6849278b399349f2ccfcf7212edfe12b69","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.1-rc.1.tgz","fileCount":12,"unpackedSize":2065909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqlnSCRA9TVsSAnZWagAAFBsP/1ymTC0P2kEmSouRmnPA\nOLGN4WjOVtAP94YBCrEjLIt4I2EkJEBxjozkwxBpT3ox74Z/X/hAhG0G0Qz2\nz6GMKViXgZ/sDVpQPAc1yw1xCAalvvQZoigbUx1cR/9CYTjPXci1eNJ+Ndny\nVU+7xxSIEi97XFFo9btAlm/j/dFEycvMmiFO1R9kpKTjJQDsbz4Ds57MGNQw\n4EkA6GZF305WyhnhWa16yZN39bT97H3/TF5tu7dXohbPMP40cmlz+1h0KE1V\njh2zwCDl6qcs6HxuUTporWjpZSp/qPsQLyGkrd4/pbYNYE/Ctf7gBOn6+UB4\nxothmAqv/8g7E5PHDoUErxNYeCEkIVaMSX6fa65SX/0ptoWah4HRsmKPnliN\nyRCuhwNPnOlV9XTeZOznXfvc/tIG+Y529lehHOblcv1eFM4uHiFq0AMZtegP\nPzE96sgi8SbGlk8lMm1k2Ng3KS1vKbkTco6fc4HppCdyfkRssRrfZTjSoNuv\nvykj8C3+ine/2UGfklBrSDHSqvmVSyx94G1n9h8OHN21rqNk7pmz02HOVTqB\nJNNiD5Ww1jtaOjQSP7QjsPna++1nD/4Gg45WInYbTnWtQtOXOVgO9os5mSha\nvUiCvphJxfhLcWcCK81b+cR5MFpMT9OtnLkKv40h0BEejMY7ICekMkSBqAww\nkkEL\r\n=2bv7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHa6R3i36gUIPQhcy2IRjeBEdOrC+ye9VH3rZ7rLlIE0AiEA03vEPSmN2Kp6DgzpoFY/RAtp6eAirfI3zgcj6KbDc4g="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.1-rc.1_1604999634242_0.5527687104259629"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.1-rc.3":{"name":"ipfs","version":"0.52.1-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.1-rc.3+6e383dff","ipfs-core":"^0.2.1-rc.3+6e383dff","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.1-rc.3+6e383dff","ipfs-http-client":"^48.1.1-rc.3+6e383dff","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^1.0.0","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6e383dff2aa34816bc9feac240d4780a3f88cabd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.1-rc.3","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-eAe7F8n/RS5QHFC9rSya8FGRuPkhMdNn1GlwkoQTpPi0WBUlqL6lqI58es6XJ5IpfTQaCvXPviUrFX4QBZl0vQ==","shasum":"8bf5df236139dbaae90ee4d104e0ee7cf1a41f39","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.1-rc.3.tgz","fileCount":12,"unpackedSize":2065546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrSypCRA9TVsSAnZWagAAeMcP/jbSaBBysUBWYjcLdRTS\nPtXyFwp7UoVkmLs5R5DLAECiu2BLXpd2vmpNjI6nYthEfrawPmNjO67ZBuZS\nufTI7PjGj2wNo6MKZNHfQU4l4+iLVuPEx+QOZJe7JFoza/qQ5X1IKXNb6G8e\nD/btZWCHzRVK1lE2vkp+BPGaox3SWFWbnXAxtAtaTRagnzfa99qVjxsnd1NP\nyUh6BiLBigo9WEsJy77EHigwsivB0A+z9uwkUkRVEl0Y50ZHhUvfstH8+TWH\nvtD7JPKxlonSnfurCPSWuYv0AvoogZtqSvGK9pNuYXlYQBeixSDKSw4a7HtU\nNtZ+gDOZCqwKlnyzNvZ6tSYGkTSwPdpoEyGhj5FxRpr6Hd8SSKRO4FopAPFB\nVIIC8deD0360MljeOuY44/z/OtYYixBO51lo0tn4jFs1PlyzR7kxE3mOomQZ\nZE3L/+0dM3WQuAzV8UhetTZM+zF/emgiGICXUX2BVm6q6LpG3duWBFEPIA3z\ncNTMHwrgaXEFMnmXY3IVGd8IUKXXvkYVXV8xruS4F397PhNF+3aoYMZcj8oA\nPSsKc8ErEDhe3XJURW07N5hNDun2oqX9d04Wf+2MNW4jSkD77GPMjBfDRhNd\nWAOxb5UtU8fEf+VZiVdDcVMoqv7LMnoVuHu+0C8+zfUjSSohF4yK85Gh8WqX\njVQV\r\n=viMT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeORNiUrzo/i/KiX0dHzwRD9pxh8dIbaURzvcDRXAo1AIhAJMaVAU9fBbdtXbQURDTPq184F0zOy7C/REjEq0A34il"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.1-rc.3_1605184680916_0.9506731900136658"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.1-rc.5":{"name":"ipfs","version":"0.52.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.1-rc.5+8ff134b9","ipfs-core":"^0.2.1-rc.5+8ff134b9","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.0.0","clear-module":"^4.0.0","cross-env":"^7.0.0","delay":"^4.4.0","form-data":"^3.0.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.1-rc.5+8ff134b9","ipfs-http-client":"^48.1.1-rc.5+8ff134b9","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-random-stream":"^1.1.1","iso-url":"^1.0.0","it-to-buffer":"^1.0.2","merge-options":"^2.0.0","nanoid":"^3.1.12","ncp":"^2.0.0","p-event":"^4.2.0","p-map":"^4.0.0","qs":"^6.9.4","rimraf":"^3.0.2","sinon":"^9.0.3","stream-to-promise":"^3.0.0","string-argv":"^0.3.1","temp-write":"^4.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"8ff134b9a2844dabb27bef38ba3f241e2c72f78e","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.1-rc.5","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-An10dUjpQ8cEHUXkNe0YO9+pIk3a3XJDP0jY/4vFDJ/sSZ1XCXZ6z3/hutzeGopCZq84NrnwpqkTPcEgi34YAg==","shasum":"1b10eef9b8e7ab715e2c761724e499e329a94e3a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.1-rc.5.tgz","fileCount":12,"unpackedSize":2065546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrlBaCRA9TVsSAnZWagAAYSgQAIJGkZHFi3H2iBTmmcJn\nSH8xIx2nV5ZUXFXqIZZXVwS1AeY5RL4czrKwB3jyYJUTz4Ot37FykjAlezqs\nt/eW8uleXARwAy0roS4wSaFhAYDTGyzccklNsuUnkhlcNz39nUK6F6c/m1YO\nqzpPRpz81XAKHP2pizfghtQsnyGl9Va3oXvD4pVWbcVIv97rYWiCUDJF4BoU\nhuLS0l7TGxYXGl4yUIlcRdJIX50GB4hY1KvTCkBc0fuwKT9lAQSE745x6gJL\n6e5iLvKj9t/VCZDtLJQemT47qogMmxNP2ClIRpk8+Zxxe4Ae7rjRgSwUfviP\nUcom82ip9LZH5En2ehLNhgBrG1m0y0VpQ1hmTGZFtIJTBLYXkIvHrCLaLdCQ\n15NCyfZ+YiZ5tyMJSiat37u1DXonkpovpqeiCeoj8wXpqJnvPdew5CsEYTIh\n7O5YfOb5hku9npAysIczMjb731wLulNGg3/NsjKD8eRd0IIMQblGKmm4K5FU\n7FxgUeBnEeU4Vf9+DIvH9CJbCNAITTZUFP8eXHeBIWfuBnrL7U91n/klbFoT\nkFJX/C1KUHx2qvip/lM2KgH3sB2rFlUkEKF8b0rgD5kTBmkD9ddEMfYhEyWa\nxtTUZNGiO3dAD0OqRq6/8HnaZInobv4KAmf39vgI5xZWZ+o5QvctFe+pcx4n\nl+S/\r\n=OO2N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHU+ARo+OTcv2BBFfIz45fY0d3pJvgr94rvM4tIGdROPAiAYWNHCXsc5bou97M1FOGz11EWK38rqIfn05R++/8xNnA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.1-rc.5_1605259353832_0.854118749201958"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.1-rc.7":{"name":"ipfs","version":"0.52.1-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.1-rc.7+d26681ab","ipfs-core":"^0.2.1-rc.7+d26681ab","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.1-rc.7+d26681ab","ipfs-http-client":"^48.1.1-rc.7+d26681ab","ipfs-interop":"^3.0.0","ipfs-utils":"^4.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"d26681ab35601d9449d71f2ca5760896418e3e79","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.1-rc.7","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-0/LkwN0AWXV4qc4heRG2+BspMMQj3S9ZxlUoBl8Ge2uz2B/y5wJ9h0RlRUERm9ZntiTGIJQwHoNbTg/zUhNCNA==","shasum":"8c7d542488675b00f429e949037974573685dde5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.1-rc.7.tgz","fileCount":12,"unpackedSize":2065471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfskjhCRA9TVsSAnZWagAAiuQP/2YyVvbuskp8tykvAa37\nA+AtYBcQSSSG0OBwzwIdIaPDXWgWKaPgEWxHxXuIE5PZg8rITupYoFP6QfcV\nGyQy/q7j2e0kQJ//tnD7hHmuRUF3/EOjkxWO6J8DHiyxExRn1jWO/RqU72sW\nEx+20MI4bFKfJCcqFj8hHubc+rUjehYB7vm70rC7eAXo4zbI0JHCqtpST4ic\nvFWfAzEPYyCQ7ez38CbjbjKBYb0StyhF+nGF0GIXsX/8VeaCmQX5zcaQvXki\nqrjkDvVmB+qg076l0fi17am2CDhF98RRjc8JiRiZ7NF8pw930jod2xIVnaYY\nKWgNcUFnhaZ1el95M6+FtNvKn+iCPxSCyTi695+FhszSy76m9KYuwJNSuLvT\n22dzHaQ0C16hWAPDx8mMBt7HjxpYZ0jYwptzWVmf8mddF5/6Kx/s+wpRBmGr\n/kI5iyw26oQOt95nAEtO928OQKmfwKniD3aQnz0Xb0hk96/aiZnCAShiqoet\nhUTzCWW9knyGe7HAQGx59MohsCdZ971kqN4xF7jNrUIWbxQXt4EYI3CmEn6x\nSJybIY80WzlRCGKTL2Gv/MJDkumIQ9wt1VrSoY/bU5KpkeRuuQtyibruOOXX\nITGkhWmFNWl6fEoDpTg5DlOpaPYdw5WWH+nDdm5mfUG9oP3vJnHmgVcLXKIh\nw1/w\r\n=b8ZF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8ECSbbH9isFv0eAUA/dPthdkt1xlGqRtjwY/QEpqt4AiAkpOwbaZaILpv+dAgY5W2LDuMygelTxWT1iCMGsazMQA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.1-rc.7_1605519584963_0.15837153069367327"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.1-rc.8":{"name":"ipfs","version":"0.52.1-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.1-rc.8+4921e9aa","ipfs-core":"^0.2.1-rc.8+4921e9aa","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.1-rc.8+4921e9aa","ipfs-http-client":"^48.1.1-rc.8+4921e9aa","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4921e9aaa627c6fd03562c26cb7dcb201d6af936","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.1-rc.8","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-xB87lbCpG8cIt+jSPw6wL2uG1ZxtvY4b8B2x1XpxYjHcjAyw3Sirdy6cs7iYJnLHTMhckgK4v1W/yuwn37nM8Q==","shasum":"c10177cccf0b8336095f6382a9276ff735df0443","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.1-rc.8.tgz","fileCount":12,"unpackedSize":2067524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfslaUCRA9TVsSAnZWagAARDYP/jAlEKEGL+t2Spdn5T7n\n8gPMwQTCXIr+VpFfq4RHniiAT0UvGUdBiHJFSth+BE2Vh4jKS1p95NWOPv41\nU9yJQ6h/RjczyILWcTsQUmqk6HHWew+ZxVEcryK3mboyryGPJSMEt1D7P+1a\nc9+ieUlGSWKUGIByB4+IIJwi1h9TMLu+v7uNMstX2dXtfcblRRcnlsc03kaB\nxN2rrKGV25ctrpd1JYX4n2c+6R99DyGJ+cJBA6gTgBTstiy5zQJFUz14gH7A\nHQSzTn0nwrJo4HnelAMLDe6jAG4dBVSIP2gpoTpmUe42MI91px1Wqspi/KrD\nRIblEhZDL9QVcOQVTQnXL+Bm4xM/WlorB1efvgNLsabV4B9H2Hb5XfHrzgXt\nWrPg80WXqqV12XbtisHnGCcI6XPI3hOryJa0I65FI1y1WSSdj1OwNRtttQaZ\nrX2AndP7WJqvLnAmxspKBRfHODIrwDLtfHmituIi4/8yRvp1YGVY3My44+A3\n8cHAfCzI5NWlho0RV/0EYTllrFP8SNpANkxH9J0xBLJiT066+u+DS10UZIyg\ncU1Jj50YtstM3dVyoa/nGT1MajJRiL4JqwjAg7nfT+/sUSPeZx30GOrH1lra\n1mBEOV8sm3O4UtgV8G6DC3S37CUndqvVSIHIpX0RWwP5sxd3i3oFaX8Ly49e\n9rjA\r\n=qiKI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJs8Z7qLSfuE6fFWXr/snwELdOAuKY0pCXFQxrN8dD7wIhAMJoCe2sK3Dsym7takmTMRcEIbujbtG7bqIYMqTk/4Xi"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.1-rc.8_1605523092306_0.6589206598541131"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.1":{"name":"ipfs","version":"0.52.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.1","ipfs-core":"^0.2.1","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.1","ipfs-http-client":"^48.1.1","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fade64683d1209971cd7572ba1b556a275259541","_id":"ipfs@0.52.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-L7QOSOIscgRS4qSpq8ewQo1FmCbyl6OM/EB+XsO0+UbN/bGamkTtW7K+noRs/1f++PZfqNTN2+c5dDxx2WfXzg==","shasum":"b1cf465f3f0b9b75cc747a5788fdda72ce4480fb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.1.tgz","fileCount":12,"unpackedSize":2067782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsmKCCRA9TVsSAnZWagAA7VQP/0HiMloQfaevBSlBHRYr\nM5f3mS2Jkj1KU9F3B9NOoeH2BfyskrEKFkVD4JC8QJQRWvqL/7gUNdmao+Xh\nlsPREeLNwfIzB58lis4hRlkcN2WUzEyBGb45PiTs00uajia1cG0xXxJQZBaO\n5SpR4vdw0XhXrcHnBQzTJsMd5+u/Tnws9Unyxa94yIY9VR3nQEOzsH1teUz1\nsfe0Jte7xEBeGLFU25z2hI+ue9SijpPqgj5ejbj4uYjfXWlcu+n0+HY724kX\n4Y9lKMHSNQCJ9L6uGt/eHCNfnJyUaTnN/L4QCD/FdYKZkWDBxwbd7tAMQLkk\nu2rj+wSny9P1KDpTTyQPu6SpjO8ZC6fE8cCSvyKWmVjmcoZDgtieyBkty4wX\ntPAFHyXkBwjgNkZlaKXgWEoCKzr+7XV2nxQ9nQSgWEpfftMP75soWhLjPgNG\n1VMiXUAc/RDI+HAYff/nMuZpMHovX8vz1E5JOP05YZ/KeKyTlyalzXYTFcQS\nxxemq6NGAkCfh5D7SKa94RVX4A8sv5UapsMTsNMkmnt+6m+eFT/KmIpnA6kg\nQl5BKJ19pz/DDl6ILRCcgTusEpUTB1MBDl6YrrD50FG4Bdr8VCfmIjl8mv4C\nrmP7JEBaThARwdbuu33kupaUfHyQJ+eSbfyCKUJEJJC/jhtSjSmAgkzCRREx\nsmGG\r\n=l69H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC32EtmdHLIBosHeC7TeptHsz6uXLBrdFuyCFJ7lNpnlAiAwxJAJ4ScU7LT2t8gphGpqqRv0zP+EGTFXq7jLGNBhqw=="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.1_1605526145594_0.4855399093736319"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.2-rc.2":{"name":"ipfs","version":"0.52.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rm -rf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.2-rc.2+c93ae14e","ipfs-core":"^0.2.2-rc.2+c93ae14e","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.2-rc.2+c93ae14e","ipfs-http-client":"^48.1.2-rc.2+c93ae14e","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c93ae14e65b8a9ab4fbdad1fc69683db55430178","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.2-rc.2","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (linux)","dist":{"integrity":"sha512-LhINBP5AxTmhwUx801BAy4qpsTwabEorStPvRd2ATXjLUs+BnyNRp0CWXfE5rY2+lpIojpQ1gR2F8rEiwr3ZXw==","shasum":"1ff752ffb1814940462b91dbf251f30b79dc40eb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.2-rc.2.tgz","fileCount":12,"unpackedSize":2067823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsny9CRA9TVsSAnZWagAAHQUP+gIQIxQJ5CZdtgfrU0iJ\nQTKQHBpre1M+cfrPO+a8KeRS84ef77Zw3DcDvdM2mC4OnxqT+5Wd8o2iwvkN\nUQ2ux5ubq8S7PKmXIlL7iKA65NjT61FHbfMIC6XNIeC4dGGsycLU34uURoCM\nIEZ/beFlD3QFrz4XJ1t7r6dmArHBjSBij9B1d6hlzFjJk1WVN+SU7wEmH2ly\npHC/G3Q2svm0Lvx2vTjKJvoHY138w9PjiT51Uty7ElehIqTWSWF8E0SmpG0d\nGvtoKHm1QsWTqW0EhyhjSjzR3V5VOzJcMZ0Y4yWmrB2uZip/8htamPbG4OH9\n+Dlb49NjuoqFiqjiB/mZG1S2OVnnzTzaEvj2gUADmOl4aMpXpIzJs3s5cYq5\nCbVsxhihQRK66oU5W8HZ9MGbcaQTxnaR+f8cOYBFOj6+kG40hNVWrLqrOjjn\nqUCpIknPLoUMSdORV1kpH9Vgskwi3yIymRQpRo7nrlv+l5zPOEyFhySmFwVP\nvcmd9O7I+M4qVWAG6g6GbduzxdphYtBjLw/ijU1qIRHsokW7aSs5M9VTy/Pm\nEuO88SYRg0zl+Lkhq1rWK5b9ngxa/EWX6ZEAH/fyoPcRL6mKNHWYy40khJ7K\nHz9WluEPBNzwGgl2WKzDalm/+pWTK9xCyO/YRB/7XAmk675m9mWFvAZCd0mm\nXYoY\r\n=v3JS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6212tLxw6fBKfm0ltB4nfkvi0H23cowXs0gs4lPDDHAiEA+YCh9P9D4317IaBZ+337MAe40XFZUnMI2cFhbHFBeWk="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.2-rc.2_1605532860849_0.6887194081949872"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.2-rc.3":{"name":"ipfs","version":"0.52.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.2-rc.3+4fde9221","ipfs-core":"^0.2.2-rc.3+4fde9221","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.2-rc.3+4fde9221","ipfs-http-client":"^48.1.2-rc.3+4fde9221","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"^4.0.3","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4fde92214ca8ddef37d04ccdd2efb3a344098b3b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.2-rc.3","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (linux)","dist":{"integrity":"sha512-FYhs9uIcFQsezgA3yD6RyLl856LB6wDBxN2YfRTvina6lhFCGrhySpgtEn/JiRgEJI6f3PbLXCNF03kNJgKhMw==","shasum":"5ba18029cc6dd6333e6d29408438f69dd90e81a6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.2-rc.3.tgz","fileCount":12,"unpackedSize":2067857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftRkpCRA9TVsSAnZWagAAGIMP/2nUP3ac4FO98R43Lj1l\nADvK8NVFHW83BDM6QhEHm+urZ2Kfn7lKYvpEVPSVTJH48ps+jfJ2ccdagsps\nn1SLdLmQeO5usrO0Jl0v+Mkn0rjwGxXiNZFIlEQXjjB/RWxJZ/CF53rQSSKw\nYAmr1HvyPLAXvbRABLf4lQW3dnG1PfKG247xRqFeyxJl3XA97EiWTRioFHj0\ne8DxOt6tVxcxyYoDIuwo5xmSrUy0tteHIEXJfN+9sjJq4y4L84hIOSoINWjD\nqIutn6goo+O+agJVPQ1onXArYKpVwg0VHQ2H9GHLiUkxGomwn4c5pL9gEFUK\ne/tpSFQpwHQ9iQzipHLS47Bg9b8khchNrm39TlhVvRDpaIS/oUQzxvsuN8bq\nT9qTFz8PyzEFjtFfn0xYyi4yuW85ktSE/FoTIISLqd+ZzKzatySi7JAvlGtX\nHyW4engpPLr67o6l7gC3L/WOyl3McumST1WqLNUdUj3F8YKxqaip2ojXIMLr\nhZRKEOhx42jbhK6BbT6QefRq9qDHZ1UE01ecSgnhEkVwb49HUZ1U35e9BwnM\nypiJ78AKksoQZd+JSbGnzuzU2AzJdNuR0opzv2qtlUUSDlMMzzXtyi0sxlW9\nH0Pr56keS4lQTIBwLJXC/5ntzJeIOB2bQo1zkKlubH5bj3eUv4EdsarPS0zG\no50X\r\n=zWff\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDJVUb0glEmLNWJcgrsrgP1x68vp40xg3furauq3TmmIAiEAnBweWPCygOmK0N7UHiIzTrsC+xaMi3SWufQxUszxAqc="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.2-rc.3_1605703977139_0.18098056203091928"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.2-rc.6":{"name":"ipfs","version":"0.52.2-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.2-rc.6+4281b404","ipfs-core":"^0.2.2-rc.6+4281b404","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.2-rc.6+4281b404","ipfs-http-client":"^48.1.2-rc.6+4281b404","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4281b40413165595e691853df3cfa19a6c219bb4","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.2-rc.6","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (linux)","dist":{"integrity":"sha512-YyfoqsgZMHDrIGlhymDVyMy6y61F8VCAFYEzveFYXKYGxt0B0KViAjx10sJ4FBVT9ojWZJ9SlMXEoVcr5rYJ8w==","shasum":"407513ddad591d1fce8751f896a6b86db20f794c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.2-rc.6.tgz","fileCount":12,"unpackedSize":2067327,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuFNMCRA9TVsSAnZWagAAo5UP/1QzjjSj5t+xAuWogrrN\nWBQPBGalZNckPPyXVodc7+2kDzYHppmkS3uqgxY/Iib22OIn7PwJd7OlXJLD\n9OazhZavwOwEpRHBne9q9VUoNsSREno5e8Xzd7klGzSplWkKeN5YmyTXit75\ny1Rg0mXvb45mD/ouSSoO8qEInN9NCsnLmMNUH9TnIUw3GFNyRwjkDCzgrdVG\n9y3KC4G2wE4LRPNdiaxjLnfxxO15eN35S1hvWA5IlOwXAVonWRzqUoPIVPFn\nfdC2bxxc6LVWZqzegWGPAnLn+QeDP63QVb29zsj5VuuB5+PKzgEjhywxygku\ndngsBs6hOib1L/C4VD6Se04bHAlgdkl9vJlzVDIuEqvq5qW9oDrTqSASDpKT\nreJNeJX8E/d8Y30hO/sS8UMtNSk5ktYoQXDwXVdQiE/kG27Z0PCE6EZ6W/RG\nOOC5UqpbssgrIrRe7mSS2uDoTueRGjqNi6kHpeiMsN4zpjyZa/Lcj+72QWR2\nbfyzaV/gFFTGU8JCd7pNWNljzD7gkgFiQoiVZr39o+0GREN7PHif0EF9013K\nnAhRviVIWw/I5FW/Fa93ZZFR0mOeH14l3V03h9ABNQxCYBe2HXRPJAPY/hfz\n+fG8l90Vi5aLuBLpBTDLpKqsRKGxu6dkhK1uD44HOl5aJ3FIhXasTp1bIvTO\nguEC\r\n=XVeE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCklBwX5xbXplttoPXGdprjF/Al4sk133UvaCKeRliaCgIgFU7DwWyjsNxmpLxjm9mpBStskPaI34qpxijFM27Ugk8="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.2-rc.6_1605915467508_0.5269291049728064"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.2-rc.8":{"name":"ipfs","version":"0.52.2-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.2-rc.8+406667af","ipfs-core":"^0.2.2-rc.8+406667af","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.2-rc.8+406667af","ipfs-http-client":"^48.1.2-rc.8+406667af","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"406667afee7db879ef505badfac8b0745fd17646","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.2-rc.8","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (linux)","dist":{"integrity":"sha512-gLhLSfN0pFzb/Ivn3ZbjlFsI9oXLBpZqq7uLxhoBjaU3VLTpHHWh1inzWcIIjYNWJ8BZjZcSH9u5Nhyy2Q80QQ==","shasum":"06453d683a1cdbfc816a7b292dc826b4b3fd0c53","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.2-rc.8.tgz","fileCount":12,"unpackedSize":2068238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvg3qCRA9TVsSAnZWagAA7fEP/ijRnRkeLRxDCX74SY83\nXvZPciFURIyDZMuUH5eLiODjn9Um+dNRf/kCYAUEJjolGxHIzUmZ87vw1B/s\n99JeaId/d19Bd4Q6QuW4QuzXvL65d5sdFtpJiF03ObtMHmdg399dJLPVDAKA\nXT7gnfe4gsQeHlj9kp2GFwmgy0vSC+DfhQg1MhIMIo7zzLjgQ/tSJhnU2qZK\n9dJ5B9+A8LCKry1k7GxwLhqh7T90TYima9x7rmY87u8hzOGfJ/fALAC3ZTde\nViv7wGd7my3ZM+kGHu91EhJ1zwNPeXFkILPnXS2I8kz+adtawbUSavSH5IRb\nulXcema0JDIsF0l2TNTe5N9qAQ6bAYbxHsP/L8xVSiySwXSAPeef9cJJ21fW\nhWFWdZTxhvsq8e9erpptLrGfcyFt5eFqD9mIEEbP8HWOdgj8yMg7aPHv912h\n3P6UpjraGs5wLC8233JX7A95VymbOurEAlAFeA3zXTHDk3OnY7eJ7FDpP1M6\nPuKAwLa7I8MWSLUqDdz7pUbyp5qz2L07RpnwtmMz+DMrrKD5PmgEIKDcCSsy\nvMIXPuroS8vNdOw96syTUk1x1F5BQ6tZqKDfhYK4LRtKg6wWM+9W26uqcbyu\n9t+tSr89w4xsFKw8oNU06a1mnKVUFo4N1DiIZYQI/mPnnUWuucIg5Lt69JPu\np7+q\r\n=xiYz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBMOOGmGvysdIFgfA4xxJO+Io84nY8W3MnqDOj0a617PAiBBL9vQILMuflktwLQZzfj4ZnAn3dBsQNDF7xlJQqdwtw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.2-rc.8_1606290921702_0.6462987673610794"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.2":{"name":"ipfs","version":"0.52.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.2","ipfs-core":"^0.3.0","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.2","ipfs-http-client":"^48.1.2","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6e660f50d3a4611f7ef909804249d3b0172e018d","_id":"ipfs@0.52.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-2OZe6HyHGzSfdv55RFuw89n43zj+hPGLfmsz0h2LL4OH7ERtQVCH/5foDEoV6NJsXnBnps8w6adCtyrZeze9IQ==","shasum":"e568d6b5818e3c2deddf7e7230ce7b87fb3b8537","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.2.tgz","fileCount":12,"unpackedSize":2068316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvhflCRA9TVsSAnZWagAABNkP/i2AhK2Fcorm9WQeD+cU\nC+lKADuDB1X4bQCDrVRnQ5Qpbjw7E1/Bl+EC4xMoFkHXN0uaTe8ib7Xsqq38\nuxilxvEqjfB9rL344r4IR3uea8DT4RZh0MI0/PHg8vzAwfYXtKlWwXB28nrp\nSXGW3XG0U3QdhDcZTQ10hks9cagpCm0fDPbFUmFG5ZcJfS9E0UoIz0b57AqR\nBg4byagoUHz+uJr8ypzXHOiMSpZZMeXOLVcGq/bJZHy85QE3e9DxufYMLytI\nAgh4QjGyJFHTMPkIdYkKVxTBAudzwabhK0uIFtTtzFItQA7sT2i3HLtPyijL\ntvdVyCTOrSMbziurkWhsZLwRbkf6ui/bcklwA9JVDg+bTo5bl9b36URs8BqR\nydE4U41gpUP3BTOsTxW/Hqzur7x7IcRkHnQeXLEBkMn4wpOMHMj5VaSRQ+4E\ng8GKeZi59JYBQqxeyuaQtJUTrKLlq2q2A4guwKlXtmlHpqbnbuOz70ZFmWG+\nxG4JruaNUm7SMUKdSoe/KxBMIX0uNghS2KHO+UOR8bC/4ke9D1jsom33L/gl\nWgon8BqSQjNzDpNsLxUUbhMw7+MZ1S9g/Q7LHBiuVaxNAmWanUel49ctw8rk\naGOaxeH2cPKGACYV9aCZkulTnBI1yyU7eaGIel0rjTxHmLGFR9Jx4l/7oeYt\nUZMg\r\n=riGq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBBHAT4/PI7QytwkcEAd/85NPqeCxT5+cTtxEi8BhkrxAiEA2h454lNjgqKecHeVIyw90cIoZeEyvXPPjsuFnoZeN2Y="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.2_1606293476918_0.44624289210252255"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.3-rc.1":{"name":"ipfs","version":"0.52.3-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.3-rc.1+bc6e3890","ipfs-core":"^0.3.1-rc.1+bc6e3890","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.3-rc.1+bc6e3890","ipfs-http-client":"^48.1.3-rc.1+bc6e3890","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"bc6e389099df351b06772e10fea7923ebb028f66","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.3-rc.1","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (linux)","dist":{"integrity":"sha512-23dK432a+bT37CjjKefotN8XI29dO258arfrU5ml4gSYDsFVEG0oLwv9BYlsDOxP92m6a0/98jE1dCS80Tvz0A==","shasum":"cacde313caca730a5f9a16257769623658583664","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.3-rc.1.tgz","fileCount":12,"unpackedSize":2068313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv2ZHCRA9TVsSAnZWagAANn0P/0J8mqNuEgW4YlwZ0Ihs\nEwR6Q+2YJyO2DNji+bDYiHBFJ9c7UIxqxlIR6RFjUEoOqVplTCVcaQCDp7ip\nWgLdG8pkaTO3ovl+6jodGxpRfzrwQd+qRzBiDk6oYqe+XCja7sZAs3cpwKlA\nwcDVSNenw3kr3Z+09YvtSPqAVKIlRSjFHbozu0RN4FRmeSjr/rDNFHWCtqUK\n+UYb1KICugvhRt/95UtBn6ZLEpP0bGKEv70wbnZdy+6TGFaSD830UwZ8QLOo\nhMRVUN7S8gDld047z1OjFlEC59SrxqlTYs96dBs54mddxQhNjhSUzSkVIjI2\n5o7m/oQAw8CCAx956fhQ8FUi+4TCs9fOCgIP2J77R3DqxTBecY5r2HE1YnXg\nQo4aV0grJE0Dv9Dt9W9NSq0e6L8AIGsICLxf7QLWY2g1T0SGtwZ7M80X0Z0p\nm/pL/Pq1npJpBbWWhPbyY7vPRCRk1SaoOkh4xTHNT/+UVw68Shyo6HBD81QN\nZHD2UWcJLLezVHvATFZQQQjMmNaBCXFb+yN26Y6Dp1t7ogutelCR1nHTGXS3\n30i3PbP2fJPvLRI3H+mBiszk9JxNjzMYxRKRMyTrmdb4+9XVXXEktnGpE+iK\nNYb9OEzKCbUrAZhulWRlLi9WjPX2TbIVynyJd7hpxAYaFKneeloLF8Fz3XYv\nhL5z\r\n=bRXJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWkt5RyH9xE8b1bvUuJMMgwrbTZ185tT18x9KmAnJv+wIgPO+lN9ehfrBzXNDOyrql3W+XlTH+kZWuPPP15r4DoEA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.3-rc.1_1606379079020_0.17567133144285285"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.3-rc.2":{"name":"ipfs","version":"0.52.3-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.3-rc.2+4ed94928","ipfs-core":"^0.3.1-rc.2+4ed94928","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^28.2.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.3-rc.2+4ed94928","ipfs-http-client":"^48.1.3-rc.2+4ed94928","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.0.2","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4ed949286dcbd7590c3a55880cfa9f3ff6a16f13","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.3-rc.2","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (linux)","dist":{"integrity":"sha512-4e6hNv5xLHCLV9Nfw3KnXX76g7m39/gwFWqLGa+zJkXkoDssj6prHI4bTVU7oPeB1XFhbXRaI0tvvmIIoA/WIg==","shasum":"eb86d0ee33348d6d49b9c3e50ee0517e1574332b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.3-rc.2.tgz","fileCount":12,"unpackedSize":2068313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv2i7CRA9TVsSAnZWagAAjX8P/0+RnPx9qmVHMf/mQ0iN\nZR/fST3UquBNr4u+Y5SBIHIPsDZc+Ps6p6IJw5hvIMtBf6Jo5dqjW+TfoKdv\nctQqJ3Ny2WTvM3YQebkMXP1aTipvqvatYuHvwpKUtEgroD2Ptk4PZJPx+RYt\nAPLlnwm8WPVtkvqZhQMBDnUgdNZXinbq0BlicYIQYgVvD2ldO9hOCuG8Nmsj\n8TZFV16LKJfL92paZPH0GQTnAas4SuQTPi8qFG80LAZlT5PIMmA2uoeafoNu\nnbTkh+T8UBmYfSNqVOfR+Dld/Ca69e4Ku0qcPAA+0XIBUO4Cto+qv7t9T+Ic\nudRu510EeMwihxijNejuEQ0I8agaCMeKWOwMdSwHrWTI3tGULoceSJBZIWFm\nH0juEwIs38bqniI0t1ro+EuVg8kTxr4EIlaiSAFHYADViYhxrWM9G6j/1VXf\nUnbLQS8VIKbHo28HjgsePBiPqFS00BjUBITzLghhcbPGBCoWpHCOITOpfVhZ\nl7KXhHjL/5bAC/gOySg6PajugPULBrq5L4KU7DXoP7sf1XSyjGg7DyZEIOwr\nYEYbNHk+BPKhDe70HdLfXXoNR8WI9wKp94qm64hXQ5IskMYP8XOn7Osni9VI\nPmywBB0+fYi7gXWMFSEXu/1hzGLUcVN4XGZv/NRIo42AklTCCKe/HlOTI8vK\n1q+8\r\n=TLD4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6gwGy5hbOfyQxHyQZsHQAZGTPo5ELi7FS+Fo9DUF/IAiAA6L2PMHoxWDxXKQAPgccEea3Pbp3UiaCw8mVUrKv/rQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.3-rc.2_1606379707206_0.4914619571909704"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.3-rc.13":{"name":"ipfs","version":"0.52.3-rc.13","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.3-rc.13+299a64cc","ipfs-core":"^0.3.1-rc.13+299a64cc","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.3-rc.13+299a64cc","ipfs-http-client":"^48.1.3-rc.13+299a64cc","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.1.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"299a64ccbe4c4c28e4e3da3f70dac363e14c78ed","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.3-rc.13","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (linux)","dist":{"integrity":"sha512-7ulyOkZYfciodZ6DgVWG58m7m1dkwIvpsgYTABAoTBtrAY5mBrmAupnLT11akXLZI7pPtQUP0Z7USDg+C39bLw==","shasum":"2648cee83ac18a911e33f8a2bd74547451b8c87a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.3-rc.13.tgz","fileCount":12,"unpackedSize":2212628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf13cSCRA9TVsSAnZWagAAXmMQAKC9i+EP+sU8Yt10UBvd\nD/yCMkJaXsltpqk9a1ZTR65j6UsiL0L82P35cyUJkftftOYkkfnzqNbPR3w+\nYVdNd7hHEbYoIRJ4VsLTTiWZBrrOzQIxuad54buZARlEfNyIIq5UiTrALfF9\nGMyFvttEF+lxjikopmzu2c6Mps4MD7DlWGSyPZnZsw132gqohn7EaCudlbtS\nftgBZgNrhoAsHvSXtbYb15XXYxjjw5xttbZEUfTIu6ePeWaIO+nOUUqYwoOo\nIPel7xCmQA5hwwYmKUrZpvT1vG81MeN75lMOiADQENOq7kEbdCYvvYyrm43E\n84WZAPSNoS1WoOhhStkOXkA3ekdHCXsscsdED0I2vfjfk1SQlyqPbUYbRhDs\nygi80ffZyYVKNGdrLyomrT9fKX5ic8JyADhmh9VbkFQ4aU3XwO6Q12GrCuM7\nm1N/fwvVNOUo0KoIqbW5FnWaXTu7T3/nxH05SzxzwGFNSbsH61xOHuaakcV8\ntvJIur4NyPrwQBuF2M0Wx4A/bdi5FUSIZUS9JYGVOKubFHx5q65ofqB/elyj\nTXyV5mw7Q8MOPj6GATXMJN5JFbrxvNBHtVzhPGpMovP6ycs1G/dhAO+c0xF0\nhcq+ccziDOhYc7LYsR+3VueT7ydOGV7XOHiwBzNmGtcqoslSSjRlGDz+S9KG\n8NpH\r\n=Mwol\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFTLVyo2rzJwuXDEb3cwOQXYWhny6Qr8Py3l5pFqoz7AiBIbcoOXocmz+9YuIDFDARiNLK0OvwCLCV0MgpKaYOpSQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.3-rc.13_1607956242263_0.673563720098588"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.3":{"name":"ipfs","version":"0.52.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.3","ipfs-core":"^0.3.1","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.3","ipfs-http-client":"^48.1.3","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.1.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6b207d77cd66bc5326f260221e53914192807861","_id":"ipfs@0.52.3","_nodeVersion":"12.16.1","_npmVersion":"6.14.1","dist":{"integrity":"sha512-zCd2Ziq1GYDJizXdoAj5nof325i3mx2kzOhG6E+xdEK6FcK6kQwKendaBlQHwTbzHLqLI7ITxsepQzFWNopI2g==","shasum":"4a1e1651da197fb8dfdcd01abd20308198059b66","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.3.tgz","fileCount":12,"unpackedSize":2201032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2fZSCRA9TVsSAnZWagAAELMP/jDjanuSCDI2dHc1XSZ2\n9uYr2yTEux5w6N+QFfhrIOH30WeORNBbomY4RVWeotZnTTqnMrPe52Ria0lV\n0rmCPpbgqqF8HZTmuWj5SjSok/S9MMYXo+o4mdR8AazpXG1TBO3mDvfMvlPe\nvJqT7ebhxNxYY/CVSfM7bTk4GMrn52twjksViU0w1J5VkASaLHO66MdoyC9P\ngfIS6KHE5f+8DBBuWEeYYP3hNFjioJo6VmB5jQ9OWFiW6ek4GDE+X7o13g4a\nweLo+HJ/iX3TiFAt2vv22ptqvP+P8mZevAfEMwo8H3CYDRBZPx9YpzmBIoqZ\nQyAeZscq/be2Du5BrLtI8Fso93Gzsat2KUxlC7H94Y3Z8qzn0sIRvUcyc8w2\nzTx6jfa/hutsMfWVBLD8rPRd4FH6PV/ABkgLahQid7t+sCycSYsgGVPSaRWv\nfT9155kL5bHm3TnFY3IcFXHlbyGBENa216SHIB/J+q1K1qAgeps68mX1l6YF\n4i4KX4NP3uSk3TCebDDyhl17dpHedfxTlkbvCtkpgmvHQbwzpMacAxsYb0KT\nPQ36vRwT/QgLVK0YKjgvpxYZRFPP8g+9cb/umnMZNBYy131UnkC4u/wknXcO\n1UjCZMuA7XclLHi9UUsLTBRV+4iiWMjBRU/y1hYWUKoOD6r5jYitEAqA2rRM\nSMs2\r\n=6oty\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo2f9hO/NzOnNZHtqOvj5p/x9Xk8uhIo21UdteAsm9YgIhAJAlbPiMLmmE8Y7epvfYi28hEaCyp8jZVxgcJ0djtxIf"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"mail@hugodias.me"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.3_1608119889573_0.4059760943536779"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.4-rc.1":{"name":"ipfs","version":"0.52.4-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.4-rc.1+50147d77","ipfs-core":"^0.3.2-rc.1+50147d77","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.4-rc.1+50147d77","ipfs-http-client":"^48.1.4-rc.1+50147d77","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.1.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"50147d77a2d69918a9371edd7329c9561626e4e1","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.4-rc.1","_nodeVersion":"14.15.3","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (linux)","dist":{"integrity":"sha512-YmNiTNzIlxM7aV9bX1Ayu3WaM6KzniVfcNXPRsP0zGyuCmnVugGlrb3NFg29Luyigl56jZkDxjkpvS0ofjTnzA==","shasum":"2c5d032666da18221e2e5b9b48d28b1481af48de","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.4-rc.1.tgz","fileCount":12,"unpackedSize":2201201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3MAMCRA9TVsSAnZWagAAjm4P/0KZiUABwUN9ow/HPGWS\nlriXVcqG5mrwag1VgG9gqkz857KwhBusR++zurftBKO99g/DBh5w8eR+RJng\nlnSdTtUSeXESPogglctlG61ulMGFfWc+qn3ODlNnsx9batBiF+vkPLDQR9Ou\ndZxDNcNoW9D37B85JJBf6nIPCTBCybfldRXAftSAYOt3t1onSYUTfc/SPUMT\nojgHtdy+WHNiN2tnSX1lDcsiCCkRBlmRcYCAkw3+nqMvl/W25zA0jPDy1DIL\nHdW97bXBJ2KohFb2iY5D5JtUT3OuggYGHVWPxQ4PFmXBsNeh+X79sO4KrxfG\nrXCbosRFG5i+q6Lsvl2wUqSemdqPnXX3g1NV6Lt4Rzw3D0wSKT8ZSZkzJbCG\n42D13hWohy2w+mTCzxz+eh+vnXxNfoz3o76xiG24aMNCIHkF2s5quJohNxyT\nBwdSuNo46+Ej2WKCFUQPeNZSI/Db/rEFqlzja78sLoplp1++RmWfhM91dVRK\nqOU0Zg1ViCL0Tefaf6YeXwLU+w+YokBS9Nv2ei4B208axigNtnnG7Gidp8cF\n+ro8kJLO325Lg4jd5Vnasi3vZcqM6AgO3F8g3buwn8YwqwxeHhRYLG6QSwZT\ngDaNKjIdiCrP0NuqKMRFZhMsX2EjZnjDZcJX1Zl/zRkdSERyKIj60Dp5C/wq\n/6bF\r\n=b5ok\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjynSEMF/8nfRhs7wk6THu+S+wqFyMncKG76oQuVw03AiBRuD7Pk5ld/1oMCVIrctTIjmPVcIu+zMRAwBRuvNFtNw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.4-rc.1_1608302603813_0.36961154409998387"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.4-rc.4":{"name":"ipfs","version":"0.52.4-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.4-rc.4+ae497111","ipfs-core":"^0.3.2-rc.4+ae497111","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.4-rc.4+ae497111","ipfs-client":"^0.1.1-rc.5957+ae497111","ipfs-http-client":"^48.1.4-rc.4+ae497111","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"ae4971113534c8f988aa14314e43a00fc3df854b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.4-rc.4","_nodeVersion":"14.15.3","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (linux)","dist":{"integrity":"sha512-3p098o0Q9zZusMvgM6j6LTTgTkBHXofXX2r9MvT9prlqjdv7IXlkvP53PyQEOeQp0b+CJ1gwzGK+5ZGhWYtmvg==","shasum":"fd6a2e4bf29194e8b88e1c62fe7517f51816f184","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.4-rc.4.tgz","fileCount":12,"unpackedSize":2216180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3OskCRA9TVsSAnZWagAANZQP/1MzTzf9kecrzlT0VAqb\noba+DKzQtnkILXXORGpwmN0azLiyPiwrd1l0h7BtGy42CL1t1onYuKSxq7ek\nd4F+buR7QXAkwRFpe8Szc8zqmvXmBMBfjbETqpHW0l2NGjjuF2t5L/yg5OGN\njIunrBHPWfqCX84hEG7cIUuQy8VLc4B+zN/qL72JaGd5RxNodpvxKvtNv1VH\nlp2ETSF6sLpJA57ck5Lig9NCKu6c7nb+A+Q1RauptkwPiK+zKJ8feSLMnyir\nDc0SNd+gZD8QHoEIgrWPV3Udb/UaUZJ1f/XTGrJHEvNl0f512gaEhM8le6TD\nhwnMfTBZXxepRXf4nmvIXOCyNN9ry5/N63WRDiPvjADWrovxnCDVfqRjudqg\nLy4pFsF5RvtHZ32rSfy2OMs3HsbSenNypv3UAWdB9IOzn4yuLkYzgXKtcqMS\npwUzvmazGXvNSMm/tOXx//moc4yi1O655WN9opb26PdbURUiteE5M0/ZrclK\ne5fZyztmb+/dBo8DdA5MuRHm041ikYE1jcr9PUO1l0m3Grsp9BdV3k/m/zTn\nNE5LKSPYnmYFxb0RMef+QXIOL81cUJtBHehBNdiu5vnqe2apLguwnHYrP0MG\nN4l7CPJ+iFGpcDm+POX/nrzFMqj5uHGyY097skWVQXEtEBUIfs9Ad2InWfOz\ndpuF\r\n=KUAW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDUCOs0AVcMCPvwD+nY/ZPtgMb2UdZMpNh/yioJpBvfpAiEAwntm8klVQVhJYKf/WJiG+bscJmSTxPvwF+I0ljIIoMg="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.4-rc.4_1608313636025_0.43729952044978493"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.4-rc.5":{"name":"ipfs","version":"0.52.4-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.4-rc.5+fad9b740","ipfs-core":"^0.3.2-rc.5+fad9b740","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.4-rc.5+fad9b740","ipfs-client":"^0.1.1-rc.5958+fad9b740","ipfs-http-client":"^48.1.4-rc.5+fad9b740","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fad9b7402e67a459e9967a1319870da165ba722a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.4-rc.5","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","dist":{"integrity":"sha512-P5qlh6AvmMfCJ5QJKjGeSu/akbqm5hZM0PeYkTF8mnoUgHwCVz8xegSWbKp5LwgF0UDaZNRxDFVZQA7OL7a2gw==","shasum":"8f5bdadb2749a0a0fe086a7f934d148db08753f5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.4-rc.5.tgz","fileCount":12,"unpackedSize":2211344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/ucKCRA9TVsSAnZWagAACXoP/j/4Txv/vcInFToOB/8X\ngMFTA8/qbc6xjboc5DU5aosbxII/Lyeg4NDz60ZBLlMJfUHpkVFOUwNUS8oo\naxTMmXABYgAaQsm8OCrJ9ILEStrn07yGj2iNqfw/chD01GHlR+bgu8SnyiCj\npsv1q+BM68ULO0CF58BYpQUG44d2qfMVxWGNIm+h4Xpn136ShwBmx3LF5UOW\n3lthBJScTFXi7JT7AmFdybVMIB85GHCwA/66l+sBOKxDZQc3+Skj09/aFmo9\n8uQggt6V+2/T6A3t+eEa8S4BcD7vKvv/x5lSq5VJe6u45BhimhNrx3rvEzXm\nXYR5JNHMj+PyJlTLKmkvlQeol45+nXs6fT9NEMg/Vw9T/YDjkEipYOWeBCb/\nlEBeSHUiVEIrd4FPIkhWWgw2RDhrI2zDOhzPYhSG5bdh6RUpSs/TB/a4pOz2\ngHDL62+RqmPBD+9oqxd3pXr6eJdkm85Wg30+iH86R/6ad5xvBmoeY5Xd2Bgo\n44pj3NYS8TEubimi+kw3QmBtEs3VXr1njazWSqL0kkUN/JXjtClCAVaOlvPy\nzVQj8hWF/l8cfbN4rwGMUALb6jTSb3WgHZ0TxGwiScSPKSAP3w/lmViwUpsN\nONmuIZ0wbbTzd25rx4uk+H5Y5gYYsQFusZmMERZd1apdi1T39NtLl6yZhWby\nNKVp\r\n=bPoo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsmS76J0FO5Li5CwDeLYHm/m2+2EKjGAjGpZeJ6Vr8GwIgdZrFCQ3fYZTJQVsM8YnuIvHZJfEpfklA+KY/vduF/gI="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.4-rc.5_1610540809865_0.09163540365744827"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.52.4-rc.6":{"name":"ipfs","version":"0.52.4-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.2.4-rc.6+b90a495b","ipfs-core":"^0.3.2-rc.6+b90a495b","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.142.4-rc.6+b90a495b","ipfs-client":"^0.1.1-rc.5959+b90a495b","ipfs-http-client":"^48.1.4-rc.6+b90a495b","ipfs-interop":"^3.0.0","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b90a495bd07cc81ac7a9dcad75c5625b59dc3dd9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.52.4-rc.6","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","dist":{"integrity":"sha512-rQao5NkLj72BtxTBSjWUeFRF9nPs7ylYUqkbO7O+2hzhDIvRAS5bRCuPrlwVrpMHTNhgOAAQ6aCPs/ED8vtKVw==","shasum":"4fed29508680d26c49c3b99ee0224952964f54a1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.52.4-rc.6.tgz","fileCount":12,"unpackedSize":2219919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAVefCRA9TVsSAnZWagAAFdIP/R/ffVXP9C4tW3ydlaXv\ncPrT/rO6h1kZkmRXESuvx9S09eoB1SH6tNParZYoEXN5BolJiu9YCuzlYs2a\n2G9Z8yEksYtq4OE0cMKDf1cvKCM5qBDZcFiqGOg3lh6Qf8xDqPcwyBzf5DLE\n0LSQZlKXHHCvNK9bTsTP1QBJsqzFwH3uH75EZfo6AEOGQsvjdM4KGENKA3Ng\nz6aojIQu4i9+tUgWxhdv+4zPFpuH85lcuNc6UsuNlU87PsKhMDf5r81mybZR\nknLX5h/zwIDHd/GM2+JvQCI7vXfb3h4fPkIWdasssouBqYQmkmFtbpTbBfjf\nXe2cD2914EMDPEntn+vfL99gjAP6FZyD33VocTdpoijidiA+rMuESInXeCUN\nsDkg7jYai8/Kq1i6es1rSB9oCMmidlvxstQCfg7U0HrsxmBvjkj7DPliovMz\nV0tqvxSf95GDxO0XcPhyo7GkdLUQ3SiTkWqtrebVKrEnM2ze9BvUspldYSU5\n0gxGU1aIQXO7fJJIeNKArFof5YnodB1cGM9VS8kBqcePdUnFqB6nP4UNUvlL\noOm1/yNqDDz8zh9by9Vhx0kRPwdlpwEIKKHqgeXT87RgM6FGVKFZJEQoRki0\n65OQDMVa0crye7RFttKTdaUlPqK/RDKn4fv8ntwJMJQhQ3YcdA0KaoyFHzle\n3OXC\r\n=uq0z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCk4Jklqi0UuEbAEZG31EL9l22gwBcUquzoxmpxgYqxQAIgKIO0Hxh0aSJ9tDYnk9/pXFVdgn0/OKJCCZpk62nlpks="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.52.4-rc.6_1610700702681_0.4960702077362489"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.53.0":{"name":"ipfs","version":"0.53.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.3.0","ipfs-core":"^0.4.0","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.143.0","ipfs-client":"^0.2.0","ipfs-http-client":"^48.2.0","ipfs-interop":"^4.0.1","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"09f6f0cc98e2b8b2f1dacc69c9491555b507da28","_id":"ipfs@0.53.0","_nodeVersion":"12.16.1","_npmVersion":"6.14.1","dist":{"integrity":"sha512-DHlOEVBro0qAL8OSn2N7tu+WQUM9141QgRRkbED23oU3oSvfYflVoWztIRlHDbgdhYoDkmmC0BeNOgxUcZEPuQ==","shasum":"307a07b1e6a64c7ec73cf7fb629263ee5b4faad8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.53.0.tgz","fileCount":12,"unpackedSize":2277721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAaelCRA9TVsSAnZWagAAWy0P/jLEx2ySbnIQDAwgT123\nBbqbHCrZqCWvKx+2UwoAFy1FLt5EEZRFOacJzBv3TiU4jf9qTj+6rwUrajgg\nVH88UwcMFhWYLHiyp3JS5U/qCSJEd2ab9F3IDUvh0ZTckIQn3fuNUCHIDr9P\n9dVY9iGwAl2QjtR4eZBkVaA50GLJOSRmBRW2bFEbOs9E2dEueJph+qGeDqWn\nBft8IjLqNRU0g7rPiuEk1NFE4/8j2KEDReCTzUcmjdSszZley4FY8jHDX5x+\nMJDLlJznpaiPanA/cz0UpyFLyMOnuCLEpT2nYcBFzbfieyqGAetvq7hFlFZj\nGgAivXXM1C2+/eB7YwWPf0ouCmBzeuRBPhnKmAy4CB5ZrrMw8xEhqJ3yPYuB\n1/lAoW12P6Xu99kWxPhqfcs8ZBLiSJYHdEYlyeL8okYEE8KgNpHTctNOWMUD\nib3ybDnEIY04gfgDItucpMCNOd1OJOz7gNxPMsxfEvsfWl2D/Q1nfOizQfHI\nZzVxxxvqOWhUtmUu5WsCyeomlJGOv6N/K0NrZ3zllUCTMS9SL5qe0synlqHY\nMsmpSaGjlatkl/BTZPxKscn3Xk2JUIcPPnfWiliauOGGrqtioPvDDu4L7ZK2\nfGGfiIw8/TNrymN8hvqvaSDDx+YvUn4epr6xAXX8ZXqn8wLEUfr4RC7cdIoz\n1YR7\r\n=zxHV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtFVHGx7NAUGY7PxbWLCItMAz/aTl3WnCGgLFZ9/9RrAIgGD/adZzrzF9TDYAOBlitKJYWElFJMcjsH7uS8ZT7Doc="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.53.0_1610721188708_0.24270090407000633"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.53.1":{"name":"ipfs","version":"0.53.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.3.1","ipfs-core":"^0.4.1","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.143.1","ipfs-client":"^0.2.1","ipfs-http-client":"^48.2.1","ipfs-interop":"^4.0.1","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"43d5bb0318cb840814841084c038f77562ba0d98","_id":"ipfs@0.53.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-CmKtT+UUrfBFIKXzGqX/p5fXgWHxll2OiWrNGrYyimwKlrGUARqrBJ5F0csbS/pUco8X0vQ+Qo8e2sTyq78dqA==","shasum":"3affbbd0b3ac063efeaa120c2c281aebbe275a68","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.53.1.tgz","fileCount":12,"unpackedSize":2465000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgB+DGCRA9TVsSAnZWagAAx5cP/2hK6+JTMhdmP/VnEyHp\nmtt1PWqw68kpJqZjx7pSlgTx2HOXGM1Wr02srrUz053WI8muIfoOck254CP4\nnotgnsyAGDTDr/DsyHA89+GIrjpjwA5Iw2S1kuklJ2aFghwqOTuEODmYDp+D\nTJeOxyZvvUhvkXIq1ntbg1CJ1QHJ/8LtKW2mA6H6RLupF1gJYCSxkKYkIPPw\neI+I1E9WNdTHpZB8ksh7p/D5F0ArVjlUV7O4l6hsAC8QTAlzJZWWiZ1VogLM\nZ+tdBVuQ+ybYArvxkoDjhcif6qk2hAHFrubjhDppXIG+1PpJBe6RhY9uOqpQ\n5vsaa4LBztTFuxBqPmytERF1kScXD9kJeLi2gr4M25KQR35e6oZJXL5Vmyfd\nwFaTYqdJ6KmpgN6QTVT61WuZfO2MUSOVAGJ6B1apFNu6xuOZBu1zjGnap63m\nDVoWkCMxFMYF1/GeBdT1DMtiyo6U4CwjOeAW+jXgMsmX6J6RBOzWDllq5MhN\nqc1IVqbDNhUZBgH7y8W2EFSlGkB+GLSJIefh/3l9Fp38Z9ezUww9ktbZAQpY\ntlx5L+rDZ8EoOQtefwUsTEeBvFeOv81cOIlXD81bmf0C98b19qEsVVHtIbaX\nPnPq1C67foipy8V4Wth5yrUBBv4/tbYCBDYxEUZcmccCWUeKgbCuA83/JFF2\n8JXr\r\n=6Nbz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0fpnU+ccZxz2/Sf/kOebD/4AlRMi3RknP5+E4uK0f9wIhAPP74vTRR7fYGHf6QHR12Z/YEocAWX9ZOX8AmwFYmPtw"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.53.1_1611129029607_0.04831871960860079"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.53.2":{"name":"ipfs","version":"0.53.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.3.2","ipfs-core":"^0.4.2","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.143.1","ipfs-client":"^0.2.2","ipfs-http-client":"^48.2.2","ipfs-interop":"^4.0.1","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"2f526025a3603026553b320e050e57e2ee564562","_id":"ipfs@0.53.2","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-yaPR8pxrR7M9ptELbzl3cRhm4ypBySyQnrFSRzsnYTw2XwdgZQXDI7tGw3s9pJX0je3ujhBvp2O292VjTeCpNQ==","shasum":"44b774c6895283e9afc45ab7ca79e2134037533b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.53.2.tgz","fileCount":12,"unpackedSize":2466449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCsBrCRA9TVsSAnZWagAAC8oP/0gPpy18nVAgLC6dTdKm\nAOz79jz2rDF6gLjvHf58nbHnaH2pGeeW4mRTiywQMCNEOdmk0oNlBi+nf4M5\nHHHNZJCCD+eUOOOVQtT+Omz8iphlYV8NdQtvs2LKSLcdoYeJXmPNT6v7zBSY\nXCKLWliMdHQh45sc/muprg1GpvB+r/7/zMczUzhaCJNEdisO7eHONySdbwoa\nde4ZkTWJKVu0zyjCsuI06BOYvOg1tjzI4sU8nm3bz5buYmsIBRZ+OAEJ96Cq\nHVtJd6l4CTeaIDESQWGH6915uFrrDHHhfwW5J4+G4hCDWYSPsYIdf/zihkxy\nt6iFL82PNCyg3+1GPpXVIeobw83RZ5ebAMiGH2LIZQ5Tn+R0n+/XOUHYU2Hy\nWUmGJDVyrwQInboKHlF7mjn0oh/2VSaQ6yczadFAVCIbAOYiX2YNbAchzAVX\nt5OZTHxsgnq0vlujbgV4M+RnlY91ahWqyzefDtBVG2VYPOVT8zZh1RI9+la+\nNWASkidBUYNAa4lvltzmiYufY5KXPEIb1lZocx6Z6iKzqFKnRunXbZ9uGyPO\n7Vmg9wblwCoAvhpOgHYMlVqoaUjdAQr+hT/mB/AHLlxiAsb4dDscTkq9WNSx\n07aKC+Y1ReEQC7Htxr76VutaHIJfAh+i9RsfE09fl9XyNbbNBN5dGx2uDV//\nryHN\r\n=uvRt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQ8aZ4tX1MZLOfjjcGk76c2gn0MuDPJNm+5s9qJcgIJQIgUcNRe5IV2i8YI0Lp8yW+WOsinw3in67oqzW86L4Nyuw="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.53.2_1611317355027_0.5337649541071627"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.53.3-rc.3":{"name":"ipfs","version":"0.53.3-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","build":"npm run build:bundle && npm run build:types","build:bundle":"aegir build","build:types":"tsc --build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i typescript -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.3.3-rc.3+6ae31055","ipfs-core":"^0.4.3-rc.3+6ae31055","ipfs-repo":"^7.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^29.2.2","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.7.0","interface-ipfs-core":"^0.143.2-rc.7+6ae31055","ipfs-client":"^0.2.3-rc.3+6ae31055","ipfs-http-client":"^48.2.3-rc.3+6ae31055","ipfs-interop":"^4.0.1","ipfs-utils":"^5.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.20.1","merge-options":"^2.0.0","rimraf":"^3.0.2","typescript":"4.0.x","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6ae31055d21fbb0243bbb17cc697ebe18d84acff","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.53.3-rc.3","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","dist":{"integrity":"sha512-7N9cqObpjp0hNzZKpRjmgPqmIn0A2UcUGN/T7qc+k5OncSnvRfSZb+yYB4JahoXGM9KuzfTbtWH+t6qfO5ndVA==","shasum":"5aa9f445156bc97e6de54ae822fd0deabdf33e9e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.53.3-rc.3.tgz","fileCount":12,"unpackedSize":2214307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFRQ5CRA9TVsSAnZWagAAg/8P/1TwhP8Fs//EK7TcWsai\n/ZNsk6KYgHjivpg6NfCe1LtNBhF0Mso4JXmUN9tv6f2bTZjY7rPSNOc1Sj4Y\nyNtB3+0RORV0CeCB5MogQjD0FxFqI3pl8/0MT2SQ836YCY1h7rDUoyccL0EU\nBh74/rhJbwxYqOm0GwLzcISmHyKQZiGUD4jBLWgClGQeNWOGCOiIuhIFC4g/\nJo+XkpW/6ZAm0tEvVmyS8hnEsDscye/9cfYzN9iI+fTqf6nMxLwMU+q0VF+5\nV6ovdZUSdfvTqWVMkqsFUJnUvMDngtbr0eXGeih56PKWt+4aSc9NQDhiy9ld\ncshxUIYWUdctPa9FuselDVQmopz31Yg5CEXeuNUnKw8gEzJnfMtM4YCrLqEL\nKuPJaSfknjePz7yXeHO73Sit7vP7wlWVC93jajj89o2sX7l3MAXt5PCC93NI\n+xewhfglGrlTDcgWJwjdiq74x5dqNo24Avb72VNd24ZHi03PX7hsSdRSh2Tb\nqdS79JjErUIvaXaIxQMWXkawoTgZdNfsHRXdO/o3J8ODbwL2sjkvvTwOhhjp\nED3xiM7aZyHxGznaXVcUbD9dG3byU2wKPXCHdE9NBvOueXtO0JLXo4lqSJuT\nlRizw8eN0nj4pTAJOcFeD6H4VFODZKWkEuMFbrPYbcBxBE+meqpL6mAKy7Kr\npfsT\r\n=anFA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzN5mgVoan0hur9YH/1a/HNCSQgWDbySK/v+RN8HUcqAIhAO+hpPOzwPekPvv22N6/fus8yknaWjYiz3lNcXn7XAkV"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.53.3-rc.3_1611994169002_0.5198907325184836"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.0":{"name":"ipfs","version":"0.54.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","prepare":"aegir build --no-bundle","build":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.0","ipfs-core":"^0.5.0","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^30.3.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0-rc2","interface-ipfs-core":"^0.144.0","ipfs-client":"^0.3.0","ipfs-http-client":"^49.0.0","ipfs-interop":"^4.0.2","ipfs-utils":"^6.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"91df29245562d5e9ff653e09b54cd2390538e64a","_id":"ipfs@0.54.0","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-XbqKpWtm/rJulzskXG8V15Hfzl3WNgpiWDiqKlKkld9LIGxOkip5Uk+EDm7MdmBuGku5dqHiIDajX7oGYsh/5A==","shasum":"0b620b8feda1960e14d3a0e722bb170f07abcd77","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.0.tgz","fileCount":9,"unpackedSize":138695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF+f0CRA9TVsSAnZWagAAXzsQAJo+OzUPstIiyQs9Mvm9\nRuP3YqPJlqokesKKDk32PDY039MTgvz+hugNNqQDmiUQtYvZhJ9ZFSx6SwW/\n8f1qvcsdvs+getH9SCz0kiCVuN28icuXDAbU/pUcgiVrNEi+GaEhQ8Kc8TMF\njmo+77mJcwhN6Q/+fWS94wJdDjUXOr9O7BCIGhkkWZ4cxHGJ32a0emrR3OFq\nhH1VnYtsm9OjAb8JqM5zuvtNXKejB4c/vb6KzHZijnJfWit/iRYX7bCDNI8T\nnoobZXWJop5O0vsSq3IE7pvZU6IaPqXpW/9lGYuv5d0B/S1p6FYD7bmnt1lU\n/IkA1wZsKZz/oiYqwPGTt/KF6y/W6+YB5jr43cFmYHLoaYwJx9vhgUBfSh+z\naMdwC9VHpoHKQ5PdWKM+naEbMlNYl7a4zOTL2SElWBBkqBTIr7jfywHQHpt6\n6F1ZLn2wGKn1E+yelNtO6sloDpGYYIwnbRtA/7+XkD7KlDjixl5JFdYZq3w2\nNDMcrd+rCDEFEopF69H4yFjLAn/5Smtrn7M/vuuJiBlyojfGzP4Mjl6LjicU\nGK60xxb1z4JiYrpmz9KwIE11JiHubO6tqnJOsrCCftM/k13KiwV5eARXFqI/\nN0ohDs1gg1qBaXxYJFlQuQ/mbKxU32dxUAXwKpEJVmB5kHzrIEwkd4GYzmVe\n5Yj7\r\n=64Xo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJcjDWhrI62HR07Y0wnt/PNXGz+6IRO/rzV9hbRlQHHwIhAOFMZK71Da94nIP+ClFYiBnp6OZN3pcB0/yUSCGij/pt"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.0_1612179443495_0.8833978485562353"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.1":{"name":"ipfs","version":"0.54.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","prepare":"aegir build --no-bundle","prepublishOnly":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.1","ipfs-core":"^0.5.1","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^30.3.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0-rc2","interface-ipfs-core":"^0.144.0","ipfs-client":"^0.3.1","ipfs-http-client":"^49.0.1","ipfs-interop":"^4.0.2","ipfs-utils":"^6.0.0","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"10fc290deca311263a4db95ec6b9e9ce132d6eb7","_id":"ipfs@0.54.1","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-s+gYr0HNm5teeiH3Wi3CJzm1wb6sWx6vpm5gKC9WfGYxtK8wWoyoCS8j/s6Eol6aAkLthPIT2eAXglOdLv1i0A==","shasum":"9069698ca54f7c4b4c2bf8b790676a211fe10c21","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.1.tgz","fileCount":11,"unpackedSize":1918268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGRbgCRA9TVsSAnZWagAAnAAP/iOio1wJOV/2vCnNZYcY\ncf6N2+o3OcgfvVcjJrySW9LZrUtNgWH5/edfmdxfulYMbsTuTULMobGFPyGH\ngVSv0+As/DyJINwhPedylnh94K+ZT+7XtkWNzGyeGvb5Z4QIZKzbyM1H475x\n0kwbzs6ra1bN0WAeYvXYM49DyHgnp/j9lt897nYCDwXgLJklFOhjoh2Hdf8G\nXE0rOq33K665W6T4Gb/uueOBr5z8PN2UzDyQB8aPe9vEscetOOwoJRCcY2T6\nwuAHYq/cbKJTniDX0OOHtq1lQTI2IvH0rBe9sO082iN2akcC8MVC42qcyOTg\nXhW8PMWxPnj2rtT1PP95p0WPrKCB10lLNjvRB6H2rGz2utclcQMS2upzKdT1\nlYDHBlE5aLdR69XaIDfjt1Pwph0wrcdrIGsoX8nW0RD/GTeSe9uSl/ReNj1B\nuQXltTFpbBJ78tZhhd58LZ+AyunMCLvdnIlnaxpwsurw/2+ZT2ZTDvTd8C4o\n9bfFgb5NcC8xcFDG1d9qZPx3aKBOOBV/HmWXVxAee5ub7L9g+XufXu+iWQbC\nI4Rpra6br6lDs4JDn0blwqqEgBaIpS74ucdCMZ9PlhSnMCYGI3wVXnqIORLY\nb7sTtVYtu/qPJSYbPa4dORBc+EyklOoPdtrRnAgoGwhoA4nzx9cGjN0UzPyX\nhNPS\r\n=1DEC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbMj0ph5HkKc5GIQibXEvGSIKTFlKVENAhuzCofd4UdAiEAzkIKACYUdXnUhYkGVr2nFmWwYL7x5MWC+ydJPIyZdkE="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.1_1612256992298_0.9265707907925054"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.2":{"name":"ipfs","version":"0.54.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","prepare":"aegir build --no-bundle","prepublishOnly":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.2","ipfs-core":"^0.5.2","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^30.3.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0-rc2","interface-ipfs-core":"^0.144.1","ipfs-client":"^0.3.2","ipfs-http-client":"^49.0.2","ipfs-interop":"^4.0.2","ipfs-utils":"^6.0.1","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"ff76e7cda441d66d327e03e3ca1dea6e901ec918","_id":"ipfs@0.54.2","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-hcgYW160LxvL+fGriDrvQRRYMTDiR/q8XOu6Jdylz8QHJ+/QF9lYnYLWA70sfUiwrq14lafxQCm5nKx2D1SRlA==","shasum":"c8694a304d6ed8ee9084c27c134fbdd2fd834ab4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.2.tgz","fileCount":11,"unpackedSize":1916687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIVsfCRA9TVsSAnZWagAA9UIQAJFlKxKMox5f0Tlk5YIJ\nJxbHwNrs14elxiQUXbPJc9q7PTDVh5u+ULca1AP6Rw9mopxPcNgFTa96MaIz\nEzM3kUe0b/TK3QkDOkVD89hRWPiSwMGmtghspmBktiQ5KNUP3CQKwoAfkEBh\nYSzftJdXeQaCfpENaOUv/sMyXLf+hgANbbKb76aj+WXeIlnUV0fn2Hr6143k\njV88Jy+yyEHgwVIusuGloa2ZVfATR8KDoW63soa8DokZK4tdBo1f2WMyW6qf\njvuoi+fzh9esSH8HA/FkLyFQyIBDF7SLCsk/dSAPAdOFRI/Kop3sJgkPHmlA\nYNEl5o/GipxxFhoDeC/Brq5ftoMwl03qtlNrbSb1bxLJB7nmseKnsIdj2ETa\nQaF8+UduVOrMF4SriOpfGDiZszQS8W/hmstP3KGi3VAOYsE1ovbOL2g1yYtR\n0HHIwBVzMZ159hnc1po+6H7E28OfdcBwZsqA624iE1TrumQa+9MtDY8TFMOX\nO5VwGkFu/sfAfifxA2cN/ooMmeW3CtsrTi5MEN8fadANBhvyNGrDvoBpJ008\nJm6AW5WCC5qPYO1sqD2oG3n65WSnaMFDGTeyLSt1QpxCEm6Y5MovrKWSdDyq\nWXsh7yliXMokjXUqm9LlscCCWUeZDGBcv0rq4dKCze9Gc3weAJBudm2FsGtL\nAG7F\r\n=nQmt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfnj2KemeXJ5LvyX7CPnKTMUFGFP/ssHRIj8MH4HvP0AiEAvi0oTEgf17ocRrP2XxynhRfQhkm/T6Bv1OB2LZtgbfE="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.2_1612798750480_0.2820109382772089"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.3-rc.4":{"name":"ipfs","version":"0.54.3-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","prepare":"aegir build --no-bundle","prepublishOnly":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.3-rc.4+be0c613c","ipfs-core":"^0.5.3-rc.4+be0c613c","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^30.3.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0-rc2","interface-ipfs-core":"^0.144.2-rc.4+be0c613c","ipfs-client":"^0.3.3-rc.4+be0c613c","ipfs-http-client":"^49.0.3-rc.4+be0c613c","ipfs-interop":"^4.0.2","ipfs-utils":"^6.0.1","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"be0c613c0e413077bfccfde0345b1ff2471193c1","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.3-rc.4","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","dist":{"integrity":"sha512-uaj4yOyQGXTAGpyCc0jl0isHvkQ0B26ekNfaG97X6MHMPckFiEgAI7GHy7hmlTE1PBEHHBK8ob+jQ6yBwiGd+A==","shasum":"38062f050a1a6e09f1044f9bc9acbc47fd49ca0f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.3-rc.4.tgz","fileCount":11,"unpackedSize":1917071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMiUCCRA9TVsSAnZWagAAlcwQAJagYeeG1EcFhnGlWfzX\nKAihlhM0+X9EPyZB6NjhSU8u2h8r3vD+7ClBc2exjGVo2653RLQo2/yf8dEg\nw6cnBVZOcupkxjTj4V8UOg0z9XpwyB3AiP1JCTMGQYEwUOnDXqrpDSoPuDaQ\n0AzYcJzo84y57bxCBiP8Y1w0fGkT3iXJBiDbbpkwyi3wb5Kr1taZho5eWYVg\nM99nHcrzRqcqRQn/7h0+mPeQUziothhhO4K52DHgMPa1Zl8pV2WbvtU2gNqB\nIEZCMo4kA1mPn0xn1/ykxFxA2iv+mTtGkZH2I46HXGLmL+NcOf0Q2AE5fEi9\nuGxCD1dSgS/FUwmZ9w6iTdBkpxxdZZJsQh/zqMrP+yWJEy9sL5GUFpZt7hd+\nkhZomcdecg4se8EQ3jlocfAm/CbWVkOIOHOdcqi/8yxery9aRhu5FKwyMqO2\nryzwBhncN+5i/WrGNnb/iWLLLE8dQJFKWzVCxvgNirQWgEo9Qlt2E87a73In\nMkcFJM5OMCx2VWe+n/XwxM1Cq1kPmRNHMy6/6ljnv7/FBbCjRpxjnpuiVNhM\nOOazEi9lOaCQ519ZJQrTN5qKHG0bSPXuggU2q/NjiqZGukz/sqkTfnddyiV8\ng7G1t/FolfmB0z/rBwm9qXYufoKj5jUQe34DXLehYOeD8PjsuQQ0OEEcHyGg\n7wwN\r\n=hiC3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICEtc9fXYnWHitP498Uee2S7Yycpf74Lv2H2fP26aumjAiAlwRJnhlGZdMLzNvIzsViJBXchKMuVPaU/LO8BBGgq5g=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.3-rc.4_1613899009426_0.5143055250234458"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.3-rc.5":{"name":"ipfs","version":"0.54.3-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"lint":"aegir lint","prepare":"aegir build --no-bundle","prepublishOnly":"aegir build","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i cross-env -i ipfs-interop -i electron-webrtc -i wrtc -i rimraf"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.3-rc.5+b7659d45","ipfs-core":"^0.5.3-rc.5+b7659d45","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^30.3.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0-rc2","interface-ipfs-core":"^0.144.2-rc.5+b7659d45","ipfs-client":"^0.3.3-rc.5+b7659d45","ipfs-http-client":"^49.0.3-rc.5+b7659d45","ipfs-interop":"^4.0.2","ipfs-utils":"^6.0.1","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b7659d4544fbf335eb5dcd3b71fc1b81f436088c","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.3-rc.5","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","dist":{"integrity":"sha512-DfTKMi5CacTrYzOkQzHPtgmAOaWSqBafXnTHNSXxgxE5gPXQxGQLt+TA7iMDjudgB0WEzgFejiy+Rf0qgGrT/A==","shasum":"344416993f2700232b46be2a3e306f83677aebc5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.3-rc.5.tgz","fileCount":11,"unpackedSize":1917043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM97uCRA9TVsSAnZWagAA/zoP/Rs84Rh9LzpH0T3hXgZm\ni08Wo1VvMwbD2QZovqmpX4cS3iVnVhrUN6XxmM2NQX/VLT6MXFxH1NPMYNQ3\nIRfz0XBKLVMV1m8Pcl7lJqInhYjsFYOVtEyB3CIhq8Eg+GmN3ihwLV2RnzpZ\nuNN+69waEdmepnVGSEMPsvUqNBVDjh9ZEi+2W7b39vuu2h+UnpL6hpUCvTRC\nlZ8N73OFNMsICjj1hZTDaBfL5mSUAUP7EN7YfTWIF5ex1tsw/MpWYegZ1G19\niudhEukUsiRYpZRow28ZnXdJwBd0C3TPgKHXI//frVBPAflXk9ZvM0mfdnl4\nFtLHkgXSsYS4fZfpW0Rbf7aleZjr9/PO9lWF8EynzT9KUmpgF9DrdtxSqtmX\nkMNJbUbNr3W5CTh04tPYrnAw8AhabGP1OTSKs+YmJ7Zj1vP1uoorJjcgHh/V\nMWk2lHFuSn39nqfcFXUyGi9w08NIUC2Z327qNzCowF38t1CvkvIqKGNJrIIn\nGMdC0EoFd83x1ceIIfAHoICsKeRgVRrmEFIdSoNSLXycx4k3WH7QRR26XviI\nJoKp7sjDTNkD+467glMi0yLvuGqAiY8qZBxpasMP6OuCdMj/dM6erzI+TitI\n8k1dCRUhf4URmIoW44FhP+i5r4o6b51C05mY4ABrCm6Xh3IrnKs9MtqmEj0Z\nxdve\r\n=FVPp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkSEJ/XQ9xIUAvtpxElVzGotTus9Hn7ToljfQmghl5TAiAmT0b9c7dWvKU+G/YNrwvMw4GOx/5lOFXWki0/kwRevw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.3-rc.5_1614012142050_0.3161007111755645"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.3":{"name":"ipfs","version":"0.54.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"prepare":"aegir build --no-bundle","build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.3","ipfs-core":"^0.5.3","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^31.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.2","ipfs-client":"^0.3.3","ipfs-http-client":"^49.0.3","ipfs-interop":"^4.0.3","ipfs-utils":"^6.0.1","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"0af3b76115fce61d64f0f8be90cf13263d2a12fc","_id":"ipfs@0.54.3","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-9uTI8JjYgYozHQYMWNUs8QHtqTe/L6r2U+x8dq+b6cgbKai34IIoZmoOzWn8GAczCpqoszG4smaTXHmcKugHcw==","shasum":"2c1ad4cfc881d255bef23c3db9853e6a04a73b3f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.3.tgz","fileCount":9,"unpackedSize":139321,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR1JsCRA9TVsSAnZWagAAdNYQAIseXXfacoKpagtpwZGa\nHrrJsuDl16FUVdmRUiZ2KjqGT3QxFWNEziLWU+HU4fFL5D5wbnNfzJ4l7BIq\n+cuKKGRn3n4ggnmDrN+wQaJ+OKSGvu7ioKw8vxtGtKhe8dxvXl8ok0O2svHE\n2IME6bnl99Cy0MPxGZUW0aaTs2J4Ntl3LCnqs2OctRt++3xMCW2zzXEQ1+wP\nZ8PeyFJ5neMWC1FOA4bDyVsbzTISpSbdYQ2PYquXsXKVghr0m5Q7sPK6jugQ\nqfexUeIo6hVzY6nFTfCyq9CfvHs59MhwTjhYUPDgJoQQVElpmoqjZLIkSG34\nn+Iswu3crUSnIUlZA8O8YNdkK/81qIX6NWr/toNZV4bkyVuXNKhr7iss9/rK\nVb0yHAViuCXWn6RZ7mw3CMdpsWpYhedncKE39zJTTOtDZj3FzgNw2bA+pboY\nCE3zETXvvDycvTkNMWW3zqUWmotmW22KaJq6WhNkbVlWuW5hgtb4P4arryON\nwsYkdb3+TZOauWSweSE6FKDyPTIFOMvJsr442eW9XCuyz8WbeG+LJrwE8KDw\nC9ts0/euHn2paY4E4tBf3/AB2qJ3tlzsglbSMpVM9QUXfPYRC7Ls/6UesdtI\nffCjKopvL7YXZWsuJkLJwUbQCr8A179+zWxm3jHV2fSe1q0RDBRDnU4zX0c5\npW/G\r\n=6+CS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEMrPe3eCZGPrnfJqoBmDk36iW8ZhbhZow/CQooRdoalAiEA61OZM8GoTow4n1fMQxcrf2OGn/u5887zRdpva2o3178="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.3_1615286891453_0.09475402656958365"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.4":{"name":"ipfs","version":"0.54.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"prepare":"npm run build","build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.4","ipfs-core":"^0.5.4","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^31.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.2","ipfs-client":"^0.3.4","ipfs-http-client":"^49.0.4","ipfs-interop":"^4.0.3","ipfs-utils":"^6.0.1","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"511147bedd51be3151de44a90fefe9425bfbcd50","_id":"ipfs@0.54.4","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-2ip0BFF+ivze+7vVPGIk/5mYGdbDDGB+JoGA12Phicw8JxHcA7Xc/lVA6yP1Ydvbl77qB26Z3aeW5k2PlcOT8A==","shasum":"9bcac907d82f89796f1ab4fafefd096a7b2ceff0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.4.tgz","fileCount":10,"unpackedSize":2342925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSKrtCRA9TVsSAnZWagAADzgQAI4G9YbMK5BYgsqvGR4y\nsPkbbLSZFiVvDPHnBVaYb8soViuQTLTq9CvPIWRCeLUmtf4as6X8UwDPdeDo\ntlELQzs2ZCoGjDJC3qR3njvE4bE4sR3E2DUdSmOI1Cl690RDTYFUUdM/XYUe\nPF2E2fCWlzfLsgZrdYwHFxsD9a00b1DeZNht1ZvXbYVrFCh360TeW2mz9PDE\nWJKzg9w1j59Ca48P6UXUD6qRORj5chKjM4t/qPVIj79K5K8Pwrqmg7Jw6aWl\nh9kE/z5OEW9Z7G6rFABWDuIj0MUFvaf6qt2nyGp+pLmUsLrhY3MB4pw+ZEg2\nz66s0Rhz3bzTFolcxhbu2Q6AM2uOsFjZk7X92u4xH/R1ITluE/3Ha1bcOv3h\n9bqni318uAUTw82w3TQ2+UlHnyed5tUbUKbN8wvNPfYA0EGlWB/e2MgoX7+l\nx5/B03y0TYnBxY0C2NDPw6aU9YMdA+roqRf3ikpnFDZG9LiJfF3Xc6wDn1Aw\nlggj1GXiEbIR/UOt4UFKyX4jTGzM77rPffe/mpQ86TUuQq0mBHkr8fuVtZeV\nzHJXn+cxUSRVO5SI7BkommCbUITp6WFtMT5mtdyxefOh/+Yk/giAZFcAsmt0\nLomZ/9PS3EkIyYusOyK+1CpCkDXBMP6OcoonKvaDjwrsciOeT0hAUV5LMbDv\nyc7D\r\n=/S9Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFp94YCxVhwrOsEgT/OVhWU6zR9dnepldHqekiEMY1x4AiEA8JZuEjI5PXyqEDBz4crxV4TMr1JFSOnKCgRtTqOJFQk="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.4_1615375085111_0.48633558786111153"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.3":{"name":"ipfs","version":"0.54.5-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.3+1823375a","ipfs-core":"^0.5.5-rc.3+1823375a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^32.1.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.6+1823375a","ipfs-client":"^0.3.5-rc.3+1823375a","ipfs-core-types":"^0.3.2-rc.6+1823375a","ipfs-http-client":"^49.0.5-rc.3+1823375a","ipfs-interop":"^5.0.0","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1823375a17ee2562f06accdd605eeefebf7a3922","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.3","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-DGJ4NqQNQYu+fAm6BQN6bZr6YSwDK8Hpx3PYxpAXFo9LFcCJEqrMjHkhSgtPcNcFJ5aYfb44PU0fj0rpsRn7AA==","shasum":"6baad06cfe4419216be2c372537f28d08ddf8060","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.3.tgz","fileCount":10,"unpackedSize":2188392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZJJbCRA9TVsSAnZWagAAQQUQAIzbbVBb2a8z8FervhLJ\n3qK4TwkcZJLpdTAgLouuQpB+3B+s2eRnnJ/Qu1t4zXx7NNV15n6CY/iWi5dF\npPkg4mLA4dlDGR2LzelbsF3n9rotTfIirNGhXbyBS1KGnPgBjdUWF19oPSVi\nx7g0+vtOc0IsiOOtz1iyXNx2EKFvSoSErVpjM3Map1TktJ1nazoU+YE734YP\nCSPJ3pC5GDSavGEH5qoHZ87EXe2pTnUlCqfnHYUm0L4klhL9fzwxPgK1o8JT\nVqpQpjJ7EE80/R8ANG9XFBQ0a8ot8QFOEPUpbbUU5kQhHKWtAe38LnFvaex6\nbqKib26W7lD/yE+CWdxv+/shGH6R6zPSBEOODEIA5X0BWqVpowK8k0eUXx2p\n0FxCh8Dn9iD2zk5HEEBaWUQc2b08JJ0aZfGgrF7sJTr5zwh8fc0MCwEgj/v6\nc+H1MTey9emW5mY1p9o9FdMBgfUxaB1GNBSbZDR69MVkVtqFMMcfueQgf4HZ\nOI4JPlb+qTl+jmWxfAh6A6wb/hAgjIa0FRltRQ50XBNw06hPHsFe4/OWQa6X\nOj5q8WKmrMuBpCcszoawUQCTSzSB7pmIGJK1c/SLCeeENnLF6zULxkar2lfW\nVf4EjISviL695j2Mr4LoG60ijY+V3DtEpdt7dyZO++hAiCeAFXQNynyhyE7a\ngizl\r\n=xYsz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6fMzenGPCd4lIZW5vdmRfCWP7Yd+VFKdel8imC4eMpAiAySeVED0Sek2xnriopu+JMxJmZ6uHdzWEjS3dVjmY5eA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.3_1617203803160_0.058952737980108694"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.11":{"name":"ipfs","version":"0.54.5-rc.11","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.11+e7de593c","ipfs-core":"^0.5.5-rc.11+e7de593c","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.14+e7de593c","ipfs-client":"^0.3.5-rc.11+e7de593c","ipfs-core-types":"^0.3.2-rc.14+e7de593c","ipfs-http-client":"^49.0.5-rc.11+e7de593c","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"e7de593c9fb74bbb82731c9ed41ec5204b18b1f4","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.11","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-BWiGTWfKdg5tM38azYdHlaWcD+vEH2t4KD3+607SqLUuJJRJkfLUHc0IxsiIXgCmtNXFUBziKsIGSS/Q/GjheA==","shasum":"79ff184019725cc772ed9cd1b0737cf625f454c0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.11.tgz","fileCount":10,"unpackedSize":2042060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiVIvCRA9TVsSAnZWagAAa/AP/AyQgFHGoRNJUxn85iE9\nqd7nWhniSouQF0sXy5lQ6oO1kavxGW4zql/wcZpInCj2YtAIGM/PuHzMLoUL\nFjjUrfi4gcAPg4/V4NXAzXe4KCPpsChNgkOlIYbHIMavVz/jlMwKYmeFxwxF\ncFKXyEl5dQuf5dZ0V4keWokd81M2KP3B/rWoYaKHBbm5KjGSnnQ524KstE/8\n8JnaxaafuUaStJ1kcZVM2aFktjTnCPv1IzXqewpefdYOwbfMd2qhT5uXTVbF\nn27o1YuwntXhRrwMSUoKPQoAPXE513ieJoL1yufvJZy8ffcFg/3i8c3WTApe\ncwWcEr/FaKqme6l3dLWnSsFV6OJuU9O/9oPo1ZPa3u4ccFY6TF3KYS0kN/+f\nzQdUAcX+TRt9rQCfe1WgXCPns+QcuR0bKlEnwVFAhmsrWFtjrFG6F0ppqQqt\nbPajtDCNhfPNsA+VlJms7x2p6tRz2KYg4xYFZhV7eJpx25xxC8+StVsFw4dX\nBeUGPDpID97U7u3JtCkQzlI2UbQKLL71o8juj47JzOme0ba6g/831eSgFpIw\nTSr/xl8RntAdNYJqs0Y88sOVQvGj/0Fxv8IPuvw+dZVM9vwv2J6dBXjpGMq0\noiHwIRuuj9jqObxkycnydC62dWIrHWU3vQMCGuqWoi/lY3FGOBxb0FhYLxaF\nl8QJ\r\n=u7vo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRFg4RXTOJPKy2gchlMBk/l+5yhFuk4kt864ZviWowVwIhAPc3xYzsoycJEIANIdLO5fELpt1/qMMpKH6+kO5dHrMR"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.11_1619612206445_0.4245078745589046"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.14":{"name":"ipfs","version":"0.54.5-rc.14","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.14+12915f70","ipfs-core":"^0.5.5-rc.14+12915f70","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.17+12915f70","ipfs-client":"^0.3.5-rc.14+12915f70","ipfs-core-types":"^0.3.2-rc.17+12915f70","ipfs-http-client":"^49.0.5-rc.14+12915f70","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"12915f708057c54a08ed0b1f6c417eee8d65ad44","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.14","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-oSf1tL6onBh6pNjvplBiEwruWp6Nh0aJshoQab3/g081T8g1gjrIJ8APFAhVxb2vK8Y275plbKD9h9p5UfjYLQ==","shasum":"76011e3d63937b20c8a92ecd19e5b2d3f277f810","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.14.tgz","fileCount":10,"unpackedSize":2041915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiZe3CRA9TVsSAnZWagAAcSIQAJ9u4shcybp5WmIZrGMo\nNUruNBJSD14hnu0hVD0rvypAMkNM0d1+orDuPyuyRlvjjGurdYKvXqZ201+o\nhk9PglutJz9RvZdCRRbrTnWBr19AxWdMVa7QYvrgzoy7di6omN0e77SfOnzo\nyVLVSAnOxPsp41QoGwSjTQwszbhA7G8gfzaTZFddIm/VV63hW5aUKbuIfgqa\na2KGpQ6dIbsfaYO2ogpeOoDNmytbeaIbXpplmti8qxkrcVAC2KJihHu40RNx\nfNT41322hCZeb0RbMSuLbBt1aJjiuz5mw426Zj7EOAQEb5tjrVyIB6vvrgL9\n4d2lBE603imuldkz7o5is5FpKLnagrbi8OuGSHDJXTgTAI5pRjy7wn8RPlrP\nZhqZTjsu8UQPBy71xtBFSunCFGFmKsya8sMl2OL3NnrBnlu7lHyhLNWtc2Qt\nCur0eWSRfoywfPtcrRiDk4n5qbNc9YolYg7ufS6956VnjoHXjrIcsEsk3EjM\nT6XjW82C2ygg+S4tBeS4CHkGjcHOPinHdHwlNtH9DwnA7LQhQ+/2HVAt0/6W\njlSxiatnkrlEyVrQH20i4PgwqJU9nvxaFv82zrdScj8IPGd3I8MEAv0VHJGI\nCTCtwYzNtHQ0oDnbl6LZrkM3+nTYPTMOUEkXqryKJoH4Wvf8taKmmwmka7hl\nDCNC\r\n=Yt7f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHWaMy38G7qa/xTl30LNiXl37sVfxHjF64v83gdK0ieFAiA2+IuLrB1ZB7xTYEyDJ8/Mrx6WbQS/Wq5ZTvHkUzoBCw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.14_1619630006582_0.0997266805644299"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.17":{"name":"ipfs","version":"0.54.5-rc.17","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.17+99bde7a1","ipfs-core":"^0.5.5-rc.17+99bde7a1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.20+99bde7a1","ipfs-client":"^0.3.5-rc.17+99bde7a1","ipfs-core-types":"^0.3.2-rc.20+99bde7a1","ipfs-http-client":"^49.0.5-rc.17+99bde7a1","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"99bde7a194e5918933e589d685dec222b083ac42","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.17","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-7E6oT9jfFH5pUoTWcaMvuyHnR6w8OvSZ0+9OkDHQrsypwp45+yfyZRoF5EO9oDWuFr741t9X85e3WGDqMRdhAA==","shasum":"901b7a2b1b2cb655d05155c620e5c0a4666923d6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.17.tgz","fileCount":10,"unpackedSize":2041915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiuVbCRA9TVsSAnZWagAAUO0P/i3r+l/9nJ8rt9YJhttx\niwiN3pZyZc1NuCjufrytiFgBITXWlLwKkQOmbyz/shNhd+5fjlkGstftjavM\nmFRlJM7N1rqRL6Zx2cpFLok7mQieo5cOcUViaXG6MmJcpaJrBz3J8H9nhN1x\n0ACkmY1GR2NCCPxanZQCEuGPa0abbAfxTc1bY+iOJhF+yZ9yLTohM0R+FJZo\nc4VWT6QTwj4FRj5x9CgYojgMZ0SwKqGdVkQRVv3+u0pnI62jsrjkuUqlynY/\nd2iMluksgt/dj7JIV0Gz5r74WKWkxITKzzL6UKMjVpC/nFX2ps8mqBznIurm\nxY8P9TuEdkyEwPQDAWIu9HlKyt+jUYbiiFCZQshNQ5sh4RPHLYqKjv9iJk/6\n6P7jKKAQB8jJ2jDwnhtWTW2SBJTxoFpMWVFVKCDLjm9vKfv+CgwPZrINdMEI\nJetzrGSvCfSM/jjJEcp0BJSARWD22q15F5mGmjEcyqo3ZFk2BxBO+IDrO2ud\nlll9VEFfyPWOLjmJz5n6G6r7gpn67cD/XjAlWB7OJ3A2WtF3ZgI6SJWHHcH6\naSSjaLXDQvjJaaztxj1rPT5T1uNwfRgd7H6o+MNnMDPmLaaDwuN+XuO7nLLg\nkaFE8fCirjdjccSyEdhlUlF0p7BmqPVB2LGbiJP87ISwkCLPHI3Vyzn+5qh6\nEie8\r\n=/F2E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDB2t5J3onN1Mm4mV8eU59h8K2b06xfr86OwRGEW9uhKwIhAKf9hDjD2Ma3NwspGHnCMWckh+TgGyuwHLzb+gCmkxJt"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.17_1619715418858_0.5212557184842204"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.18":{"name":"ipfs","version":"0.54.5-rc.18","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.18+2ec15c08","ipfs-core":"^0.5.5-rc.18+2ec15c08","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.21+2ec15c08","ipfs-client":"^0.3.5-rc.18+2ec15c08","ipfs-core-types":"^0.3.2-rc.21+2ec15c08","ipfs-http-client":"^49.0.5-rc.18+2ec15c08","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"2ec15c083eef923096b30dd927801331e97b4f5a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.18","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-HkpXgaN7/IZsCTPyF4yPYluztzzJP4wCAohDB/sGcBj6GopmapLYjedRa6u1aIeasfw5NnbJZuvrbDwLse1PKA==","shasum":"cc6702dcf51f66dc8c1ab2139178712ca7a6c134","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.18.tgz","fileCount":10,"unpackedSize":2041772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi8zxCRA9TVsSAnZWagAAnygQAJWzgxeou/w8h70DPWPz\n75MQy5DXXpdh+YRY/dpRXWhHtMtNpV3QSMF9J8w+Eb6TCVcFR2KM2P7cWGSa\nZywOQgI7+W3UiDvYbvgI2xqQIQHp7U8RuiOSXJqu1uZyyOYmj6WHvIWqpOOb\n6OiHDAaHxuNHBiegLR/Diwgd6YUlCjkiU/ln1jeB7edi+AJEb6KYTS/C8/dD\nQIL+epXHdN/meIwPZxfDG93X22uH/T5w/7+l8THN4ma+uyTymb97z6Itvf1V\n2gfbF/2wYu7K1xJt98WHNeux1onenysnaQ761Mjwio3SULPF3+bFuphtx5+J\nVBNa0F76e4OM/yvMYEt/s5oHEzDatgEN62GdyYiXKdj8zFuqYgLqfjcIwwZg\nNNQf7q1z8MoeUpjQVNE2ypPdKkbaEByxRzy1j4zwSHPDYMHXUxUDLl6SgMaJ\nY0WpPH2qBHWV02EbbJRB7HbYKsmxXENFW6SOzZtWdP0dOPVY7vU/Ntvg6xd3\nELG0c63uUH+ZfEeycTRvva7SOUy1Q/4b+L5+hL6jwlYT8waEHycd36/oes7C\ngTFP4rAtE0GJUszfNiwI/SVbVyPTugaeuZqw7uIzbAic0bfLpmOb4U5StFBx\nZLS18nyZ5yTlt/LA6Ct+dFnhTdmsP0d0T3OGOKqWZ6apFrA0pJhENeit/Jg/\nizXI\r\n=qJUC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFL7Sn2hajbVn+l9TAijwETD4xXDCOfirM6yh6yGIIDvAiBD5t5+paaK57QFXBo+YRNbTXWrtFILryzDHV4mv2JcSw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.18_1619774704913_0.6758007001023745"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.19":{"name":"ipfs","version":"0.54.5-rc.19","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.19+188f1f39","ipfs-core":"^0.5.5-rc.19+188f1f39","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.22+188f1f39","ipfs-client":"^0.3.5-rc.19+188f1f39","ipfs-core-types":"^0.3.2-rc.22+188f1f39","ipfs-http-client":"^49.0.5-rc.19+188f1f39","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"188f1f3930ce2dcea5a4fd6b6b1cf413ca04a736","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.19","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-Udz3+rKw1VF+TFzn3HAujBpwUaHvbhberiCu8pj/lSxD9k8OTC1PKT4O7E9JtWPBXi7VealVgk8+WDI/KKlCng==","shasum":"3967ef017af911422ba2194a308137197ea22857","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.19.tgz","fileCount":10,"unpackedSize":2041988,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjDjPCRA9TVsSAnZWagAAPkAP/3fAkSDrNowF7ZyDzBmT\n1pJpqkvqC4bxBFpCVsAv97hgnHTNbJGYGHBGzXeAR+TfzufWVGHWWcVdrt04\n/EPPT/KTYsROCV+3kIw2MN1hn+cNbawEBf27SsFiKLMXlGEIj/uSFXrM3Mhn\n210t6scKlamjm7SLfCcDPXucjz4ce6ve30urTGnspF3r3+1bHVaz7lMA8pdX\nQ7auDGogKbs+SOLlF3NwwEhvLbO8vpKRe1uzCzzpn9/boJPRqBZQTGnU7rhA\nPXDIELLeql0+uzNn5+0C7cJ/t15yWoY2EqGn87pXilpjLVzSKnfiv+WQLHg4\nkwDXbgFdvNGlszb8IDNDIcB9Qo/+X9UY8kw8lM0V7rRs69j5pvr/jAzj+dAe\np9pyUSfvQ51IlEybalAUeYAJSPgpyC8OA61n4jkcN2KyrtUdUP3buSSYCfT4\nL35KTfQC8o3zPuhpbkpHxgGuJ6UzLQNaSXmRog5mOtbt5Fw0NJjuB2sbPgO9\nocDoLBxf3F9PjHs+blMTicfoESIhrbkdsTfsrvutL9RzIcsrSX187oC3YOl2\nMDI83WhOSzd1fnPaJtEmhHPYTCsYSWRfclls8+s0R23P5JQaBcT1mb1I4vCG\nqJI9R+stLfqOgwpBI8FXAngV93ys83x+tBcbxr+l2SVl9bkl7OfBTVkrWnYV\nyGaE\r\n=VbQ7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFUKM7/Hnd+VwO1tOmb8Zqx95rnFU/NQR/cxKjZim/CAiBAsc/JR43WgZlzjdG7Hvctgr4MGSDz6sJ/oGkx/T84ew=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.19_1619802319293_0.07049171995525705"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.20":{"name":"ipfs","version":"0.54.5-rc.20","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.20+1a447f89","ipfs-core":"^0.5.5-rc.20+1a447f89","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.23+1a447f89","ipfs-client":"^0.3.5-rc.20+1a447f89","ipfs-core-types":"^0.3.2-rc.23+1a447f89","ipfs-http-client":"^49.0.5-rc.20+1a447f89","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1a447f893072d482d5a7ad148f9232dd43f64cad","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.20","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-UooqzczCAmP3zqebKMH5OnWH9v19eJAQJ3M53AV5ci5wzfmVuDA7uVrkuAFc54DoWLOBrup7nG3K5zXvvG6M6A==","shasum":"247b3995bcc8122cf2269284d357cc4186c9240d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.20.tgz","fileCount":10,"unpackedSize":2042060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjZWQCRA9TVsSAnZWagAACiwP/0rAZ+tmZve9QnTMzzDZ\nHCYJEJukC8aJ/+L87EmGdg7hO5ohPQPYO5hXGs07U4p+H/7uPtF5SjetrpnF\nBktzIxN4gxG1PAV9+AJc3FCK6A8dU9lS5a+VnznqLG8CYbPhwt39xmyTiDOt\nd3aHOIsbnsT6eGML3QOV8ZUPQnSeiXumuBho+TT0H+SKB+aQqdeh4K8n9+fX\n4WLDrSHGAPtlkctIOKkeF2FRFexDt5nvo7nVeioVjxBOkdGLN4smSDPzTA1V\n84IRmdQDG7mKVNI1QAdZUwcN0SMxTKRyUZjkW0PgPIxs/8LQQr+tQki8sIp4\nW5TjBwvfQ8PEZETjPzIjRFGwYNHp7zXUfNxeGigvZ99No3XdiQG/J6efCBjp\no7LNhI1NGHkLbIRSjKnh77aAX5rCOPSofj7Z4fINknPPuDybG6wJTu2JoqLt\np056kutEoAkDmHm9vPyeSgMPf0YpJzcqdD99aINaB9k6W5lZg+2gvOoM5/3C\nkM1nC2Y+qrITm6Cy+fKX69DLjr4lUhAjXYg5qM5afyKWXSofvVci7ZiXACL3\nC/EgjhQGHLzPvlJ7GHsMB5mJJsRUB7gatC6m7RWRVasFKpJY1XacCLYmpZLs\nDCNKyz1mPi0GUceiEbMkQMsNH30Vj86DH0qt9P3tIyViUSaYOU7EVGpvUeLS\nk7YH\r\n=qVBm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIETcvnTWAClbBymXF0BhuyUMUAUxQvLp7cEl+25SKiO5AiBqyie3Oa95tf8hQEd7I7QKgfJEw0mrb7uVe8mPVkBCTA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.20_1619891599486_0.6617098799601107"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.21":{"name":"ipfs","version":"0.54.5-rc.21","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.21+21b70a1a","ipfs-core":"^0.5.5-rc.21+21b70a1a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.24+21b70a1a","ipfs-client":"^0.3.5-rc.21+21b70a1a","ipfs-core-types":"^0.3.2-rc.24+21b70a1a","ipfs-http-client":"^49.0.5-rc.21+21b70a1a","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"21b70a1ac38d53265daa52d8c0eef12d4e3255f8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.21","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-UYf1n96vDK6BW7fPw0RWEbvBVEdIK/Cy0VptPvsmk5lBgClNUeUXUy7yVpPmXRtCwlfTWLGG8C82Ip3+KxhuaA==","shasum":"c87f9fed939f13596c8ff244cd31ea251a824cd5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.21.tgz","fileCount":10,"unpackedSize":2042393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjmpMCRA9TVsSAnZWagAApB0P/39oRsBo9uwlTDA3Ledk\nZoFBbZ+NemJeHN9eRQDrvYYHpO53yTq/d41UqPbbVUvqEJrWJ2YuIUh9ddBX\nD6a05lgf/T1AiR0rAYwDEfCtxEbYp6GyWiE+6+9Qpz40lEORHPvxqjp8626c\nY3kkIUdCcuAs52CrziBffxlsPcqdclFTrV1dVfuBEZr+9fTbY2TBceec41Vt\n64+TAyzvcF0j5onahrpvDcT7pIXs+VVHdvlomS34jO48HicD4Rjnn+t5Qppr\no6rh7N5nhWIbzN4s++eVHLHa0bwQNvd244c7NW18yHHVxvryhz57/qpFKCBD\nuLV86U40rZhG/mGzd/Js6RPL4hliS9NiNY1tYbhcdsR6agIeJWFZZZiJYUan\nhmmIEYmjHsm/9a1SIF/7Ty+cdQ24nSdEfoPFpbF+W0mI4cVkbulPU9YCH2lv\nPPSRQ55pndH8DXjOJS4r2KVG9L0IK630x9ZO5JUI9rUQ4kTV54sb3tyywnvY\n7m3JO8Pbkc0P8eZ5Jr9BRmuCjnzUukUohz/QqSySPokxiuPNSojSpQXP1GdA\nzv1EWVpjuJ4Oa2KM7KDkRCk8TBdzaLeTw6+2Hks/6p9isOpKlvSbnNG3ceyL\nCa/nZXGnYgX1te6J5zX8QHDuDlnUtVgr+5vY1DCHLtRzObiIEHZPxIRFNwzV\n9ZQe\r\n=KeGn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID/Dr32zSwhdLcbMIZKe+nlgh0kne9FRJDREpvBz4Y2+AiEA8ebW+JQaUS9sPQv2ZmoDrrqeR2Bv9nskUchPCnZ2M5I="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.21_1619946059653_0.8192899889390479"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.22":{"name":"ipfs","version":"0.54.5-rc.22","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.22+0a4fbb4f","ipfs-core":"^0.5.5-rc.22+0a4fbb4f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.25+0a4fbb4f","ipfs-client":"^0.3.5-rc.22+0a4fbb4f","ipfs-core-types":"^0.3.2-rc.25+0a4fbb4f","ipfs-http-client":"^49.0.5-rc.22+0a4fbb4f","ipfs-interop":"^5.0.2","ipfs-utils":"^6.0.4","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"0a4fbb4fa20b17d80b75fc57be49fc8cd7c14877","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.22","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-IoMbZ/2TszlfPz3JkFVMwieHfeT8cog0vvaXklcmf8VY5uQ2AdLVtgxhpiVDsv9GcuU5QV1+t4Xj5p9iCi7LLQ==","shasum":"0e9fc2b853dede4c3b6182b7c4291079dfd743c0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.22.tgz","fileCount":10,"unpackedSize":2042393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkPuiCRA9TVsSAnZWagAAA54QAKEISJvQvzQb8TAhpj8m\nY6I1IgsLzsTEtRbNlQuVOUySPNqzv4JlaX0ByOh7bNvb5BVM/aZ2pH7bdiUE\nGaiGxEa/nMWRY7LfenEDI3J0I3+Zl+bx2OymnHhkSQrSAGg5DO6GdN+twTy5\nH0KNoZUKiNUnUAtesG7I78a4ueDCVFuYnjNghS/J4mQMN9T90b1c2NjVw+W9\nDVJbZgV20GOvCh4V5ECcbcijSY0bA1JrXhBC0Hklp1CK1HVqYezxALbRBg00\nSaZiuXPlAa6o5ZW0b7CN6tF/RGkJZEh2avt2vXt0Dsxh5FX+xGpLq7gWatnO\n+eeKCC748h4s82J+eezWujkNjKQeMYrMHwf/TkBQdZ0zEc/uZEP9aCLbiQLy\nP0TUU/tgoCcsOENrOm3MTKWEbSgF9uzP2KhwtAREfaWlB4Tpak/gd5M7M0GJ\ntVCNKR0tZkGROLr74TsB/ipiYr0JSCrQchYf4uEu2DzCRJe65R073rVoSvRg\nGInTWdYjd8TpALNVX4MMPRDogHSG+/2jk1juhBpfIeno6FyoaveqX8P66fDd\nB6zNbfclpQwPVyTqeOXYH3DQsbJ53LcCjRCglHbGV02QEgboKxlDRjmtjcof\nz08h37YKBKyPzJ3/vQT6LONtrXE+WDYeRQ1i+5MZ2ZzKKgOoZqw+td6xRmcv\nZxEi\r\n=W39D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0zU5jJcSznXmybYJP27bLYbuGCVOXIkw7ImcD7fNn7wIgeVraxesnZeQHia4QN9YXkYdl4nGUEx+r1iGAar4txgc="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.22_1620114338016_0.38677112929520674"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.24":{"name":"ipfs","version":"0.54.5-rc.24","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.24+a297e8e4","ipfs-core":"^0.5.5-rc.24+a297e8e4","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.27+a297e8e4","ipfs-client":"^0.3.5-rc.24+a297e8e4","ipfs-core-types":"^0.3.2-rc.27+a297e8e4","ipfs-http-client":"^49.0.5-rc.24+a297e8e4","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"a297e8e4770f0b8e88e065a604acd5928e561419","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.24","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-m0QkP3a/HsH9OZcOVPdQbhMUOoB3/8VsV8lYfyITjU2ruXWPDPPL1BBug3OJti6v7VYv5bQFRQagP2lbC2MaMQ==","shasum":"c1146b4433570e35693c608e68a585a7e03714e6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.24.tgz","fileCount":10,"unpackedSize":2042392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkSiVCRA9TVsSAnZWagAAPgsP/3qA0ANq8JeBM7OV8ufe\nKmrZReusiDv2/+KT3jdlmAVvmW948PlG2OeoxfIq8RYB1Xe1NruE4VG5kuB6\nQxQT5dXvb9LLSFZtI6qVxDYy7wyM+4ZdNQfWn0t+OZQcrOkY4Bm9o4ep8Qi4\nBqt0hrcdkxB18AAiNCBz0UClrVFX7lhdEpMO+LU53LP1x8pYTq98aY4E/21C\n9JSKGBOoNCgEhKhHq4bM1uPmZwLZu8AgQoayQmka1AbcIx1Rfx3hVSkc6cDN\nvVwqEdcPlmjUYDogRekgLd2xb2Ej47Jcd8zkDlplADTRfk4PLFx1hLTo5zEz\nl9TVeJE7Kthtua/HEOr6Yhxb4wU9AEDInvaGIUvFFXvMTkf4JBryOcWruXQ1\np77h/4BKLr4Sfn9TX6O2JkcKOZMlgbHJKJbXT/+1E9XHKMYZEw01NMAEJCOX\nuEfGF4ardSe/AuY5/AcO/yAdnOtK/AmhTOuBbPKlCOssDjUomjp9tGNz0CRO\nPtesBfAC0PLKjtJGHdaoSgYLfohAPQrCjFG6oQSy2glY7nhT9b+p1gMvEnui\nWdTapVI8W4BOUMtf3ibCW8FvdU1UwkyIni19Qed+nuu2XD5VLYTvRtx/Nimw\nLMghQ0tbz/jrs5gawOOb2mbdbPmRQU0/5I2PMmsF+NKQMUfPS8Yb62XM6S/w\nqbnd\r\n=bM6A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICrQbj4kuJSV0sGo4UcjsT9cyzoU5mscLgOqd6Nh5vCzAiADYg2Rv/QEbdRiHoWWNV7XgQ6nlNsbLVpwvKoAf4MpeQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.24_1620125845122_0.4373827112751867"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.25":{"name":"ipfs","version":"0.54.5-rc.25","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.25+09a65ff2","ipfs-core":"^0.5.5-rc.25+09a65ff2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.28+09a65ff2","ipfs-client":"^0.3.5-rc.25+09a65ff2","ipfs-core-types":"^0.3.2-rc.28+09a65ff2","ipfs-http-client":"^49.0.5-rc.25+09a65ff2","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"09a65ff238770978bc9a91449c9d76896f9db8ce","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.25","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-QgEXTMDGGZU5uKzBJwGG54Wnaj9e/cWSethrUGfoBTN2tmbCH35XQWxEKqo97aQmYmk8b7u1WJVctCzDpW/BGg==","shasum":"b593933061e7aed05e578bd42727d3acee6ef1d3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.25.tgz","fileCount":10,"unpackedSize":2042392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkS3RCRA9TVsSAnZWagAAe48P/2uGLIph3LAu6XqfIJi/\nTkK9Wffurc3HVF1RYUAKAfuxfUs/TpWGdjSykKGjFR1up8Lcadl7VYAMuHhv\nkzpM0qIw7I/iWoltWHtFE9EMxLsYL/6cLqc/VdNUrV4IgqqwcHO/3B3b1Ack\n0Fw6erKJaAAni0OVq7Nmv+z9HPczzp84c/ruUkzKUPR2YwCDGP/QmmnjQWbF\nj39QvPhXG0mkY4N2lBmhQwtw1P+CLpM0A2H7sak4qc3htnTonYh5MQyJGbxn\nScFF/xE1uFnSTib4IODjuClDz677ia4avG64RRo6qPRBxTETsgHweuNXBR4I\nZWs0CMZc7HgzhgqSL/+oCSsC529FfQnPR0bCC+l2UqKrdBQIH8oDgoP1angW\nPpcAh8oPosAnj4++rrxMTY4tEmabaZQ8hM/+gEZV6Bwb9bEtTSMCDZvzvLsv\nYq48VIpiINi4hpyPEueZAlshBdP4R4oXP4z0ZhjORVCG2xVHBrvIW6K6Airw\nQDUlzWuuSGJ9pg9nJrm+vVu2NuCZBITz/hADa+xdb2fG8SakqzWafN8Zr7yj\ndDZ4MBOAvBvOiItZf8DjtvUPK6lx8OWvdHAvlbZtV2yydsnX7x8qZWLiWosi\nXyK8BjFK80OYoEhITNKAMitSqfgu55PmSCDe3tnlOm3vLVriHDjwyLLf42tL\nKrBs\r\n=y8gC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCez0FNCiMzsBqZ9wxZXcnom8qqsb8nzCzM7MS5hJbu2wIhAJb6E1Q6hwyP+qAHm9l1nYCb4uMRK0TJDabe8AqSEK/i"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.25_1620127185064_0.4176097423954275"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.26":{"name":"ipfs","version":"0.54.5-rc.26","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.26+1173edeb","ipfs-core":"^0.5.5-rc.26+1173edeb","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.29+1173edeb","ipfs-client":"^0.3.5-rc.26+1173edeb","ipfs-core-types":"^0.3.2-rc.29+1173edeb","ipfs-http-client":"^49.0.5-rc.26+1173edeb","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1173edeb04e6497a8e4d2336c83fa8c450fc9a24","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.26","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-4/Qx5iW5EyoJN8jS2xU2Pej27RMWAczxnOOt4vHaCNt0+qkT7tDpYPiYi3UcwIOf/Q8hN/v8BlBlBRxkrBhorw==","shasum":"b12f664c15326c77cbb72e88eac0965d55daf773","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.26.tgz","fileCount":10,"unpackedSize":2042392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkVKCCRA9TVsSAnZWagAAzrYP/1iI7gws5qFnlAEUaX2o\nPCBrpzCmiwaAK42z7fbEzR7fhkKrz7pPd+9K9CobN0gScQ8wLLQH1ycNN0ie\nHcnUUse6oqt+R89Igw7qeI86Q7d2KUb4s0cJCcyZ7OP7t4wdrY2f5ZPpCHN/\nor3H/maTTZ5GJuRhn3WcVlwCvgLhbyqW5ohejbi4N9EKRRSbvClVVrwRSsj7\nucK/no9TrX9DcwoA4ng/iSj8ELzA5y33e6BFNEu1wcsSNx/r9h/kH6lTZzyk\niG/rZGFPGpVfPKeCAfKrmvgSfN2wES5pr64PMqBC6uavlDsAk7ap1uIPUUNQ\n/nq5W2zEnnu+NOIlMCbnDU3glr1bA77r9YpQhMFQUF6juguLM6b5FTPU+c/z\nQHesQI/p0lUGq69Q8QCoP4clubYDRZdKcY+O2bqtPb8vL2jjBI11koC/Qexi\norfdV/mRpeZVeA2WbgiH2W+CMQQSeLkGHs0hkT2OVbk1mG+AArS7EK1Q9j8M\nnkm/yBFyveGvCCxFTJ94CLPCR4uITBavKfxK7rX5x+yEiWZYTd6ELLBCOOPM\nKNpV+2+G0QuRradSevjfftgmuG92aZMFe5L4XaF973AQL0BvN2CnJDcR5kQa\nc0np6D4F7c9DGJEby+H3MRss7x22cdC1h0lnr+ATMLtDHtKnCoLbhj4+wCpt\nP1oS\r\n=rqKb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbJA6qvuRWrpAz8ygMpB0IRybkObK1tDpbE6ugPJmkzQIgNXEQPleFvR4cCWgP4pGmXtCbQOcTaDGoakezCOmzabI="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.26_1620136578087_0.873237585832124"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.27":{"name":"ipfs","version":"0.54.5-rc.27","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.27+3ff26938","ipfs-core":"^0.5.5-rc.27+3ff26938","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.30+3ff26938","ipfs-client":"^0.3.5-rc.27+3ff26938","ipfs-core-types":"^0.3.2-rc.30+3ff26938","ipfs-http-client":"^49.0.5-rc.27+3ff26938","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3ff269385bcf0432e94aed545f74ab370d664557","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.27","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-g3ndARrgPRlDsOMJQRKVhq3lS/POpUgQ2IQUMugXoRFlJrTTvw+1CdADPLmqqNZL7TK8eO+5vyevXIGy437TJA==","shasum":"657b08f85de354766bbfc19d711ad27a054d0b07","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.27.tgz","fileCount":10,"unpackedSize":2042429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgk9ZgCRA9TVsSAnZWagAAmrYP/3tRV1mD5PI6HyYCBeED\nifht1eBVRnsTnOgrB3lvXsizTGyJOM9/FvwAaUB26taTcChrZE/yqTqPicfQ\nSGrrxtUm0dsgawqtnRgnzYvNVpE5UHv77TqU6PtnRi7ZoQwrp+4IBJwlUYM4\nQrjC2iJingMV0cBxe2jCKFf9+jv2Qw5zmbpGGUN0JjfKtjDeQJJA3p75Fy0B\nRd4nkWJmhdlZEIM8kHWF0f8cjIU5fP3peA/DpO008KNdfS1quJsn2M2KJvbz\ndRQBte6ScxmVvagvdjQDuNuKxLlKuoveDAs3IIn9UZlFTmbvcsBclkhj2wz+\nZJXZX/WhSaWte4ydrtll6BJwf84vbJo1fQctC2Wl0G2dGmfD8U+4At87CNjS\nGkmasatMRcWDBxJxhOGR/taEj1iB24XgwYnJFdnPiR9dm+E/GqlfJPfa0LmS\nKtvkdaYmkMKWhT1sL7khV/HVq9z+WtTpOHa6eteLTFKJjDXbGSj3exQRdxD5\n3aNZ51zW/MuKB1LdAHQpablCYM4zgsnsLGqkvnlZeDZthwz1ra+KQcEA4YDT\nc+V2i7EEgUI5uZOTBl77aRv7CYICHQrnVwjA8O2U3Sxm0sG7vMLHlG08FZJt\nKH8OM0yK4/jTjwbO+zsLnOV3JzlaP8/u7I7y1tQwAt/DVqRo7/CtBqJQADyg\nGwpl\r\n=QUX1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPFaok65w5VpO9HZI+n0FIbkrjp6JgGxzeuFAZwP+OtwIhAPKmS/g1F9eNCz2f8Y0qR2hDz7qCSa90qkakoR5/D5Ws"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.27_1620301408281_0.772302411723671"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.28":{"name":"ipfs","version":"0.54.5-rc.28","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.28+d5897854","ipfs-core":"^0.5.5-rc.28+d5897854","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.31+d5897854","ipfs-client":"^0.3.5-rc.28+d5897854","ipfs-core-types":"^0.3.2-rc.31+d5897854","ipfs-http-client":"^49.0.5-rc.28+d5897854","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"d5897854419e83a146dc8cc01de04e73b250d07f","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.28","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-JLKqOOOkVfPCdW5Y/faJ5vO8EbfQNwOHXrvwPNju0/qisebhDUCNFgTeBDK5jJH6Wng3WIKC/BbUCUfrhDwLnw==","shasum":"b76b39acbe607ed5fd43f273cc8287b888ed2c54","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.28.tgz","fileCount":10,"unpackedSize":2042429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgk/q4CRA9TVsSAnZWagAAWswQAI3AMpppSwKuME4oQpvp\nRzG7z3McbDVtYaoHU4Ey7VpDa43V+17nWtTcbETh4z8bMSK75+MiwDLDGOjh\n4TCa3R2+xIRRaJMA0xyPTnivSpUnLCMHYjzGuerAIuCx3zEkzKxPp93Mthc0\nflQroN/ZpariLb6RaODzTbFwOIGMRXI5o8jXmH+Tjo71G3MR7t3Cm1x21Fin\nRr9ep3ZXDR4gHLqTvJj7dWvWLmhlpAY1PPBNYF4kzHwMfOAS2ltbQnjtfSfE\n1+pBsBmarTugCZmdc5+SZlDvlAMcTWmAa35nG2U0s9AFVmCUwIqjwvjX0faH\nfO3fj/OcpL2IZvhF9ZUZVbb7IhHYUcAmIK2Ks4uJeeHKRMTr/2dBFu4lWZLU\nIJI/EU7rfxP6npQ5rGxjSgFTCGQpXjYT+DnT99hF2iT1GKDrFk+83Fl5o42y\n0J3g/IvS0A4RxvF7NQ3Bkd4Y6tB2TRfAY/2CXBEdBR2MfsCwu2bC3txMzHI6\nkfUUosNRbjXSm2NX7oaUF2wMNOG2EAKFCVQACRS5JM4BSK6F++xTGCLJUktf\ncMRSvZKRWoPmVFTa4FU2cbvB/tmKns9j1g5By4qjGfmWNTVuEtCmoAIGj9W9\nJPcoy9NWV2Xm0EFr/4t2n88vWtp43yaGAd4mg8qHdSdXxjyuQklBCUOlW6af\nq7L7\r\n=2qQx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIkQGZQdZrTK1e1K379+x91zFR/7OmvsU24v1lhJH8EQIgNuMtRJKByAdyWUqL0gSdMUi6nhqWUfW6jdmb9PkwkNM="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.28_1620310712055_0.22985175956604054"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.29":{"name":"ipfs","version":"0.54.5-rc.29","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.29+3923133d","ipfs-core":"^0.5.5-rc.29+3923133d","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.32+3923133d","ipfs-client":"^0.3.5-rc.29+3923133d","ipfs-core-types":"^0.3.2-rc.32+3923133d","ipfs-http-client":"^49.0.5-rc.29+3923133d","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3923133de800ffd5a5550da86b7bca254206104e","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.29","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-5W4UmomYWoj3xo74cencv8T33v/4OVLF98937uCgJDAEZYx0D0qFzS4b/Wy3VSGx9cTqEOYFfiSj52UIXEBhXA==","shasum":"f87faf21bd01a9168634da691325ae71bd1eca6f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.29.tgz","fileCount":10,"unpackedSize":2042429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglSuzCRA9TVsSAnZWagAAOVwP/2rhYwJMcZiUyIwWVixe\nAKtsVRrqWyLuFRwbTdtrcWX5O8Nui0/NULhRf1TxKACmMCn3JkhISsVxCse1\n0iEfV3Y8li/E/wvCMGNvfXmS0QJSJovqRxOJb3dwmxUcTx7C1EFafut+HTVW\n5n9BF6P4p6x+tlmRYoku5AM6tFlkPc+jAKI1X6hzr6EM8sk3GB7sHD+hIlAz\nNHCjj8RRRDKY4MrAzhZpu1rKF/jmuoaDDprcxpZamYQF04Xn9KToCKy64nlz\nq+pbyiYfO9/50n4vDMB8KhrKwtGZDnFEmaYJV2RjQk9/mB7KhV2Dk38DUvC6\nm+1KR7aSbNwAa4Lr+cSs2OtDOcpfQY/VhOOoNvT7ribRsqYrFviYbDuwau6x\nxe68efpJ1rQZRprgj5moQaBCyqvMwWHlOM3hZtqUEaKRgmuztOODzpEY4Dz4\naSJHVaPonMEcOP4/ynen0e4tXzb6y0prpAEoK/afLTFO337uHVXhwZYWstSp\nyiDnE2BpsvvE7cVIDeSm2jD8Z+gCshWWbtc8d/+wDGfUE/n7So4o4qNtC/hg\nUxI2G/DqRTmmnoNYXcygUDGTmKvn0xar25GQWvR4qNKSy79s93lst/Its+xH\n5CLQS+mD+MKlt3G1ID1TysumvHQN5vFH20IF447zDLo/O6bVsys23neSGdL/\nf2Tg\r\n=NfhI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+0PeM6Pfqhm/obCZRJCueWZLq9a/hEr6k2JCWh9ANAAiB6Zj4+74th4gWFnfC21r9nJvyAno0lp6FmzJmusDX5DQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.29_1620388787109_0.31649910470581677"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.30":{"name":"ipfs","version":"0.54.5-rc.30","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.30+cf78a190","ipfs-core":"^0.5.5-rc.30+cf78a190","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.33+cf78a190","ipfs-client":"^0.3.5-rc.30+cf78a190","ipfs-core-types":"^0.3.2-rc.33+cf78a190","ipfs-http-client":"^49.0.5-rc.30+cf78a190","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"cf78a1900dca2d466b3694dcf677eabba5ea3b17","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.30","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-TS8XTO0kiexs9+L7zEou88C6uZsW2ExYwCPbAXY/iSnYkKVF+DqSJF+y8pRiEmSGQDhOvSQnzuPl/Df+RJUUkw==","shasum":"9c560880a44b3a91eb00dd0f796fffd6d832897d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.30.tgz","fileCount":10,"unpackedSize":2042381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglUNDCRA9TVsSAnZWagAAyW4P/jtC+ny8b9r7LOYOe4Jf\niEnAsvLRwGXe6DJJ7la1OpQsGeN6Gg7ETYuz29co46dXZwHCjlSv9lNbWOZH\n+ygRUY2wvCKkcbaxAF60ulNuB0ux+9aQ3OOCKKZ3E1RVlvVbh9LYoar1/N40\nB2H7YkU/qLzDiEngattZntzJstkOpFNvGP/SDWAeW+r2C9m+WEE1OunuZ11n\nQ+Rw74VOpTlcoSdKx/updSsi80BeBuRs75w3VkiscR1/GnMrlh5y+Aj+p3HZ\njIP1pwIPygsUL3Wuj4/ZWV4F9LN/RszHt99NYyD+Jv133wQ/ZD2fUBjCS773\n1DI9N1KGjo1tS+GgHiUNoQXwCToVSAy3DCFQA7utdDUZrwoML8tQcaweV0gY\nOOHM/Twl3p5N0VM1DkF5W1WZewndserf1g6snICnL12Hw0n7qCMUdVocrRjK\nNB3lMRBYS9/K7K3ZRO6SEo8nPNowyy/bC0yyO2TpD3nRuuBhczRbaFvfvl27\n93JxtOjqWGAQTWQg+NyfIf8ky+uScHjweapZUFzopjj3h4j0L1gCmZx8TCFh\nVWtW+5fz/G90iuzFTKD3T0h4LEDE5lmDDYjXgZFVbJgNEt+M3b0BeEsRZLUV\nh+pFiDEDQaM/oXjl19szbyYh3Lu/iq54ps8dGwjGKyfNUELkoeSeJp2583VM\n9Da2\r\n=kk7d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7i6lJ/ATuiirQYndQjtUAU5j0iZWLuo8LC3069r1S7AiEAxZvBfMpPnqpRvdNUsrRlZpxXwnHpyEyylr/2VvQ1XlM="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.30_1620394819295_0.9007602454963528"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5":{"name":"ipfs","version":"0.54.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"prepare":"npm run build","build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5","ipfs-core":"^0.5.4","ipfs-repo":"^8.0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"aegir":"^31.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.2","ipfs-client":"^0.3.5","ipfs-http-client":"^49.0.4","ipfs-interop":"^4.0.3","ipfs-utils":"^6.0.1","ipfsd-ctl":"^7.2.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.21.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"typesVersions":{"*":{"*":["dist/*","dist/*/index"]}},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=10.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"f7e44c203c2aba94548cfd32c58e5510fd3d5557","_id":"ipfs@0.54.5","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-vmp/wK9gchCFH/n2W/r863TvQczHNKS2+OsCaGKhAJNJ08dgHuzffmcfW+pdg/WDTmgFGF+1+ZF555EuL/Uh7A==","shasum":"4173a6e194ff491be47c57b1f3aab7669e429aa0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5.tgz","fileCount":10,"unpackedSize":2378803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglWDECRA9TVsSAnZWagAAkLIP/1Sv9rULIUc1lOjKmDda\n5QtFBAAa0YoiZIODLWKFGqmyzDm7pZxRgSkFZ1RJMjQhsjTIXjoor04XOWio\nnMnBSe8qql15o/RX/bokY4uhIbsGLKWruyKXDfPJT+QRfiXNRe8BoxeOnEBF\nf0AiMK4ZJaf5KZetJQZDocD23VDWOIu8UHzvtl2IeJNOKlW/J9vdTn+2lty5\nGnloKjaVXC5iU0lhNNv+mhMcng23JFJVbJguVjIQRRojxfEhB2vogJi/BsxG\n05BNzFoS7RwGJeOqOWPVExP/eeoVwGWlIHMfbXgQHU0e0Pz4rA4YeSvZAADI\nQKZE/WbEfaZcirWq4s/fw0TNRICQJWqfBt2Wn7me4Og+vPm7yPdCkeFFGlV5\nH8BfmzWJqMDqYtPXzuM6UA8KE+2FmMH06YFTMr+orLRajr+B5MazI0LC8zyH\nMupxBgJ9vWcgER3jycS3xO2gdO5fLQ3GK1wv9eaZ3aYQFyspNUXhqI9kdD0a\nWc8ayTRhKHYfhw8vNNgnaWh6nKTfMpwMCLXJ3Br14wpv1kkq8CialXQ+yxQf\nNDZoRlx1i/wa29T7lntR6EPlIMAkdW/F5xCYXIjDm+i3dSNyRavqBUn97C4F\naN0jVZyKSfBi6GyGvJDCRWaahOlyaydlZyuF+G1S1Vtte9ivkRwe20YY8waz\n//m3\r\n=DCZV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLrvlx4TZ866Zvc42kaT+ye+MNeVils6kiRsYcskYMbgIhAJh1uBRgBITibo7qNcL3UWXAkPN0dIX5uxHsKLOiHzbo"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5_1620402372433_0.16842029593801633"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.31":{"name":"ipfs","version":"0.54.5-rc.31","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.31+fe6024ce","ipfs-core":"^0.5.5-rc.31+fe6024ce","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.34+fe6024ce","ipfs-client":"^0.3.5-rc.31+fe6024ce","ipfs-core-types":"^0.3.2-rc.34+fe6024ce","ipfs-http-client":"^49.0.5-rc.31+fe6024ce","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fe6024ce70fe83da84bfd938d725f3e6814d0e9d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.31","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-jycw6sHlj3+rMQaEDjtiRuuLGw61QytGXaRZE+BT9IR/ITRDT7C5INy6Mtiqo7JQfPkE6NJ4VkIPlapmX6oEDg==","shasum":"a14395ff42ef38f7fbd97953a4b8543f9a5d309a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.31.tgz","fileCount":10,"unpackedSize":2043282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmR/WCRA9TVsSAnZWagAAdZcP/jbqDsNU9bC595ekuzdC\n2jE49tDw35q5TiqYrISu5Tur8ZiRfciN+CyJ4edxmT8eW7rsLFUrx1Yi7poE\n5WPRrwY1ofaIT6m2ynhAZS0hZpCIBuiW1GrYdui/Ca38LPLi/Bsa0gbSRCut\nsrali2iresdI+grCRxVpwHRc2RGORDQlxJGVdcFdyMcptSX3OsyalHFFXgnW\nIKh5E2ruxd5wTzdWWNI/sQqYBWKnjrl6fNKu3HA0vzFJMPGgY0hurpkidNyP\nUH2QdQyMe3FNv14oqT6+oRrAzlNYO6jzwbsNHRkfqECHMOAUCAMJ5GJZaift\nyrm+e4syugTRxOy7OC7o8+8Zu65vzc34qCD8n5ME37kn47CglgaVxeAP+Qin\nFXkAfedW8Mm/LYMSPfPGUUDSc4J6yR1e8psACR89GMvkXXEAP4QZLkJLaS4C\nlV0rbCM/dKYOzpQKIoW+6+PrM92MNGOhF5/SoU13Bvi3kTke23u/c/EVydcd\nwmn5kb1fIGTnbmFD2rT0/5XXg/6EOvlJdHEX0uFqtU9X8a2Uic/Z3JTs0HOW\nqeS72QGdKMaxzCmTj18Fpp29BU1ymTkGURaY6PUxVGW7vPRLYfvVkr0vODQX\nud6+wgq6mMV6WKhf2G9oU5KJAQT/r3TV2PlrglHyB/iA0tndY+B0o51CSrjn\n4ZT3\r\n=tDi+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICLprVaFtufZJrBWqP73Pohiok+5QVPQLr2Loftk5OqzAiEAlm/GogttPljzmbH4i01XwbH85oBYJtEt2x6MR/b7w6M="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.31_1620647894382_0.15951019890410834"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.54.5-rc.32":{"name":"ipfs","version":"0.54.5-rc.32","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.4.5-rc.32+bda04d10","ipfs-core":"^0.5.5-rc.32+bda04d10","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.144.3-rc.35+bda04d10","ipfs-client":"^0.3.5-rc.32+bda04d10","ipfs-core-types":"^0.3.2-rc.35+bda04d10","ipfs-http-client":"^49.0.5-rc.32+bda04d10","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"bda04d105587606ab2d7efba04b232bc89b1edc3","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.54.5-rc.32","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-xv43XX2MoJuYRs6hDmmNHpbErW6xSNjMNbTlXNIv1fT3QQGRxN4EwmfGqvzvAsnpaBeHuoOL9gEOC4lX4717tQ==","shasum":"5d6e4684c2f2b670870c4ff83522e2a2956d80c2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.54.5-rc.32.tgz","fileCount":10,"unpackedSize":2043282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmSVOCRA9TVsSAnZWagAAK0gP/2JJTsPc4llAvjbtENuG\ngcK1obto3NUQBCIDB4IFkjvrelpp1Zeuak0XA3O44cDx1XLstUVzjs+h7r/V\nICQnhx3izhD1/nzoyzW0AxxKLA9GkRXUuE290Th8SVZGVot+UW5Z0euWnEEb\nqSApzESxnKx7TWPCJhwjoSIANwHQY86ooLf8Yzn8BHDXV4c02VoVQymUbsyx\nm3OauT2A3grUOuIqM+jV/s8DzBZzhOYPZJmK1VZJYXBWSp0F3pv4MJU4GiX9\ntKsncCTY4zZnuHnRXRvWqyXd8zBEl7VZ8fI3AiLxKBUVISdSfdbmMLAw0exR\nGgRV8gQLb4SfW+EPqLBbeznjHr9IW9N1Gsfy5c1c0tPqiqzPXhpIaw658qoC\nqCeMiR9bl8K/6skgP3ZBRozwKYSKF/pXimLiItBd4zIhVLEkLhUWJ+XyjISB\nw1v59bKzxSmKRSMsLsuCSzu4npz/PGHyaKkeMmGJ9ihCf/ibaKITZJw/nte+\nUSLMfWTy2a5EDubTe4zboZvKlBuboiFKTS1tb15bg8nZvVtEGNeKhQhOfIgz\nDBT9ZXBtBK8QNiSATep/v9WSjqm3Xyv9TFl+yjoUPGe8mE47OteBqrV/3EB/\nf0oOoawZLGLg0hV66/UNmU6fbLzOa9So4xNurYR3qMNvmFZnD0eTwp5IxeQp\nTuzs\r\n=lx+k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkPFJ0gCbSxlkIy50edMl0Qyk2KzeJuKuh8iCCYngP+QIhANVV6ivE+VWlUqjmHq9Xu74BOsmgxKIQEtNubzuNACwc"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.54.5-rc.32_1620649293678_0.4541888405447363"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.0":{"name":"ipfs","version":"0.55.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.0","ipfs-core":"^0.6.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.0","ipfs-client":"^0.4.0","ipfs-core-types":"^0.4.0","ipfs-http-client":"^50.0.0","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"99053f721305d1905f36a16631f036e883cb02d0","_id":"ipfs@0.55.0","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-fPJfzLTVaX7mgfvNt9/6ztpg1H7bzle+8q9GQZ90GowaEDlcQClV2e2VD991hItmnVlQswGbU/Sw5DeHp+QLBA==","shasum":"dd45b519c532f30dbaf6797c68ce318eea7a6651","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.0.tgz","fileCount":10,"unpackedSize":2043561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmUosCRA9TVsSAnZWagAAeiIP/3Qb8FVbfOSVRGx+41+4\nioWjiwV/T1uH1U1BU/wc6Xu2lu47oJTQ1STk4/NQkp6zu81/U68IGlhOqa18\ntaprk+2bGqVu5yWxPSuZqJoWm+nXZ+GWA2gtJWZ9Ei3LqC4U4MieiJmMyQkN\nVDO9ks/QFg24zyfouLY7bc++Oayy9QHlZcoURY7yFuvEH8I5masPzKjPjgl8\nv6NcZTy8SMiMQSPup0gArKQXnbu2ElHx62k6aXXROvycwCEB6Kua8hd301Cr\nHU70ToDu0j+TO4gMW/k3HEMgmbEs8LEeMmFq4BpafUavSqefVmg6N9GVMF3Z\npPbsy6nsEX7tN7U/vrF84UjvTXCUxPECg0VfxMkwa+44KoJIrpKddwtHLvU1\nqoANMBScnJXxpareSCMy2mcdQVgamAIhTKE/n6XY2u5/fFYaSCW/4i1CMp40\n3V14tpMR09QIIkGGdo4XpphBZdNEmHZKXt21PmCJPyE4LS+BNJ1rWN/ctClN\ngYQeEypVtDnxwegU4UVOK09MWh2d6pawThaXWrhKoo4pRXjwXJnpa14S7SM4\n8eSORm8MuZ/BXpEGZRa6jjdVJ+sQsvuqkzaUiRgv6IekXofRfX1CzShxsenT\nhvQhJ+UAdS6OvqP+TqEjjCg45cpO/A+hsvStTZ70F366CvvMhSEg7hrRb8qe\ncn0B\r\n=kLYk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwkYUUrMMOBCo8aD9dn/L1kealxe66DFeoK/HsKCXOUAiBrY1+w4M4ojTIFDdRCbYka6zqW+DH9E6WnLcNITYabpQ=="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.0_1620658731709_0.9832381764383862"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.1-rc.1":{"name":"ipfs","version":"0.55.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.1-rc.1+7f6faa76","ipfs-core":"^0.6.1-rc.1+7f6faa76","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.1-rc.1+7f6faa76","ipfs-client":"^0.4.1-rc.1+7f6faa76","ipfs-core-types":"^0.4.1-rc.1+7f6faa76","ipfs-http-client":"^50.0.1-rc.1+7f6faa76","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7f6faa76a8b1903242f941837e2c717cd8095d10","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.1-rc.1","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-ZiyDvIzQKZw22conFnO45WFgVGh+knRN1rEMxw7IDEHs+seGIhYSZMwHTGTGPpxkdjsiIUCVp/SRwhkoSAeNLw==","shasum":"79b49dfda8f1c0eff7f56b567529385397bc8c5d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.1-rc.1.tgz","fileCount":10,"unpackedSize":2044399,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmh/FCRA9TVsSAnZWagAAYRQP/iwoZCM/ZkqtcjHCZaEp\n/S1N/QkmK3w1OmnbsCdSjEKpQQ0HPDBm1F1ZEVNsL+z643sAbr4R7XXpPku1\nChab9x6EOGvgwDgEEQb8ZG4BGUUeYxH2WKn+4n5hj2+HpCe/JvOdo1Zc+rjc\nmIIkqzyUgIo4QbzDzFvfR+46Gj8+K7LPXE9Hg/9P+lbDMmtWBMabVK3pdUBe\nGe7uYQAymwq+iW4tWATphqvG0CElhjTbU3kyErkcXDRebKTUW30IFRXjQIoX\nggkKHa61MvUVj9455pDtobH2BRLVHUnm1Bhkr1AFtZNlMVgBpBlvNDAfJSJB\ntIUr7Ks5qzmD+Z9im6S4p58B6ZRUhOKY9QAdHhLv/aU7LWj2yIaqn15bfXAf\n7IvzdXy2Lo5Tr1cPaQ6tQchwXoXgA74m5Cn7D9s10QXXLW9jwqZT3CmljaL5\nZwOvKH7pPL527EoSNOhaHygahf2XMTBfErDEW0EF4lbNgYpw17C5mvwdN1CH\nbdzfKFGmRjTgfJoDtLvYgyydSgBTSuEGOL7E7CtHs80GhKdMlTA0xuXqM+v6\nHFay4+EUIgypth7VoD9UKxTg4H/LWBNwAw35/avBEFetuVBXVq7u35Ibl76v\nYCb2egjZxhQdocbBm5rbjOBTxe6xbL4uZziilLuAgFl4peoT0zJIrFqoQ0E+\nJ5ks\r\n=toZF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICoVSbnRnA6ysdaszmbHV0WdsCWdKU+ivOlD+rwFNlG1AiB3/3eo1XHkIxP8/C+gzwDRGiaONEFo5ODrj95ESJx8DA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.1-rc.1_1620713413046_0.1935938012873395"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.1":{"name":"ipfs","version":"0.55.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.1","ipfs-core":"^0.6.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.1","ipfs-client":"^0.4.0","ipfs-core-types":"^0.4.0","ipfs-http-client":"^50.0.0","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"bdea5bc95073f568a3b0ff75ec5c26a64dd2bee0","_id":"ipfs@0.55.1","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-sbjHUWmUl9cVOM5Fm9mhU+w2SBvASCSsRKwj4RVNzdGZOEBet+1NNwJS6pVU4RvF5jy5R1tbBvg8ynBcC6ZLIw==","shasum":"c4f8d8ad47113f8c48c3bde5e59157bb93e3bf3c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.1.tgz","fileCount":10,"unpackedSize":2044697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmsuNCRA9TVsSAnZWagAANAIP/iWl8NTn039kC6wBiGYH\nbY1wFjZm4v/Bz84Fc4rAAMj03k7vpU3Fee6Q2z0naPZ0k6oqeVnX2d+rXLS1\nxFRksAHUdRe0k2OAABJ0Gq/09o4dyTlrh3pO6AeNXyx9KgRKdnxePq5ElpzL\ndcrj8K8ebRY0t5pAdpK2BoPTObI/xnmV3N9fWXJ+zhG44vNLdw/737tqXlde\nrWEJrbhkpXPrkeb2OU2nFeEKu1MS7BhzXQfwuMUlM0WG2t/C/Y4oJGrpRdQS\nl5jkpOLyqYlpHlD6xZUcvbHYj29cLV8yrSYpdQWu7cbGQ/g7YznE+QD6Wr9z\n/OdcB7SrkbEI3hRblErBGgA3w4dgemI2ngakF4rFIl/BzbqmwtetftUnVXiE\nMrS+ILngXPcCGyYH1VIo/wj6H3O3gTPrLVrWxLvOcSQj8pE3070D6Lpp7fbN\nU1sotACIVPuVFoWKXcG1TQMhAq5eR7GBSHvw+JNXk2ql2M5t4Xi49/71iFDs\ngnH6uwJhl/DKtpfg2y410fhijbra+M43yZ5zShzheOiK5nAEbvasuWvTQz9k\nqzFMFZKy2VYaBVecHmWuMAEiBqUYOsodco4r92jpGWfR2EGAQDrWjZMtkgb9\n5wZ5v4/QhISWeTOf3nZuRFySErqV+NmfE7QXOp6aLbPoz3WLPmd0lXp6BmD6\nKT5x\r\n=4azO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0wzR8Zfxf3kV3tBfHY6zzuvgYV16n/whJIaTlZUlr2QIhAM6DLPqLc6hVCf/mKvija6RkcjGMirAgOkhjyw5RkB1D"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.1_1620757389099_0.7499562485847664"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.2-rc.1":{"name":"ipfs","version":"0.55.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.2-rc.1+18faefe8","ipfs-core":"^0.6.2-rc.1+18faefe8","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.2-rc.1+18faefe8","ipfs-client":"^0.4.1-rc.5+18faefe8","ipfs-core-types":"^0.4.1-rc.5+18faefe8","ipfs-http-client":"^50.0.1-rc.5+18faefe8","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"18faefe8bd4ee1f671919672917b848436247138","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.2-rc.1","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-1hdR+gpLvS/wBQNHwYcceVWRIN2iEaaPSJjWdneX8v0JEIREBSFb5p83bXIPjh6tWH9wmKqPiFUudDdzJTOlWg==","shasum":"48b7aa258c07f12609db41e78809c218514848e6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.2-rc.1.tgz","fileCount":10,"unpackedSize":2044753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmujECRA9TVsSAnZWagAAK/IP/0xSwQv9t7LyQOQjt1z5\ntRafnchKPfQcj8iQkfZNuOcjVIbfyoDcTnEGn3mEPGsBT7S2CQJjpejELrgn\nprk4sxTShpI1IFAUjX3j0kuyB7jOZBFmJ8IQ3CBcTMxQ576Rk0fiSU6fv8sp\nGpo/eoXoiyn2UaCmx1yKbjAKY+2JtjREOvwqNJMJLwpP/Szlt6R0kFGXbG0J\nYavWFcpJDeqr17wddFjPnbm5u/uay20eAt23+yrTuNjC24pmc82h795imHaC\nNCr4kStF1C2QLLIZ2n3waQUBYuf4SSsaq9K682Xq7kOaB5rRVBXM2UwG4LDE\n3mFRfOmSYQT1QIGZ8OyIp6DaLbnwqeZnbpYzXJlkqY3ttT/TEsE0n0jK/5fz\nX5GmSzDrR3fgX5QkyswOfsU8SdFx+WLw593IBZwy8RMTYFcqO0vdkPjMxm/t\nTVQBMvWqm09oEXkJIlD7crsNP9ofv+OHMM9AOgOWpL+as1TNCNvfmtsm9ZPQ\nAlWX0GnOoRPWslojTcIygIl3TYjcQVSWXhVitKzehOENFCfTq/EYXedytXqA\nYQE5ypxJGfsyWSYjpJ62kewu0i19k6/7kQrYHYG2l3mNLn6zbsQJcl2X2XSF\nRY6v+AH+Nmbi5SuM+/3fvfrpJY5KgbxeXvHH6fLoCmXpHX+K2sMVgOEhqJRv\nMbZK\r\n=l5vu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDd8WYm1X3Flu2w2Nf3nqQiPMq1YAY67x85WpzWP78UwAiAqGLWZDrQ/Dud0r3zLnN4tnycCCsMrse52mI0fDgjHtw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.2-rc.1_1620764868476_0.10563824935059118"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.2-rc.2":{"name":"ipfs","version":"0.55.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.2-rc.2+311ff504","ipfs-core":"^0.6.2-rc.2+311ff504","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.2-rc.2+311ff504","ipfs-client":"^0.4.1-rc.6+311ff504","ipfs-core-types":"^0.4.1-rc.6+311ff504","ipfs-http-client":"^50.0.1-rc.6+311ff504","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"311ff504a98ca562e738eb3bb60fddbdcb5eebf2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.2-rc.2","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-y2C07y/ZPKMil9XMI/KFhVh4d5layQPylfc9Rs+jQM+ntRdwzHa+XFqzhGd/5KzkokgFqzUUpr2DEJgxeF9ZCQ==","shasum":"ce97a8e7f7da0d85363426d989ce6ee6cca7a3fc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.2-rc.2.tgz","fileCount":10,"unpackedSize":2045744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnWrWCRA9TVsSAnZWagAAwYMP/RsOc7dxcBsYa0AxNfzb\niWlnTk3ppHBWpsUiRCpxUI1obkIPf5dM4pS+EhN3XyNw0GbWhSOAR3UQHlLT\nN6LjPmYLWfB4bhCiR7nhYRMqaqzPm1wQwMo4PVNaEUFvOj5WPnMeZo0igFLk\nSOONrUa66zriLh9+o7Kkq5YSWjQ1JLTBdcYyjEQUfBiEwpqOjJdy90upenln\n7/e03S75p2S1wFLUIH+iXJqQ4dl2zBZ+nf/IjKRGsNO7jtJHTObvdqYGBn0J\nvgwTyKoRV+GnRsQm+RE9CE3B+/8saGJ5/+TULgRzeAThjulA5RP2MCEsP8e5\nAbJE9wSGr0vDNbSQXMwVj6uA/rALPvj/YR9hMKVPTU3e8/ks2wC+jPd1J6I2\nTnaDKjf8D1NQWJ8+KI0d/QuYwx78UAXQbPIVkHWwbLPUCtsh/yunv7KEKrx6\nwgdDNdh9IYsxK8qzD9uoCUpf7pFw4WtauVbyA4RxzBPYMElb9wQoB3fAN+28\n7flrIsJYK1NyzStevDU7bXCGgx3PUJFzRiJKc6cH7++u04ERN4Xj2N6LK7SN\nXb4zm4I8LA6NuJuh1s9JVmXsW4ZnmmfEmSPD8x0r1AT/TU6Xg7uqYBVzaaRd\nhEz3GoMAAuV5RAfO79qoVrGiHChMzDQfA3SqaqU91oS0lS2lVsnC3sqYAxE4\ni0of\r\n=RaZA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVJxw810see45InGeFVuEDYe4iBnaTTGFmV2yOcQuxkgIhAM17t9p3qwPDk2eWVfOYzH14G8tnk1u+rI0S39h3AU3r"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.2-rc.2_1620929237952_0.7039977413026057"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.2-rc.3":{"name":"ipfs","version":"0.55.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.2-rc.3+1926f990","ipfs-core":"^0.6.2-rc.3+1926f990","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.2-rc.3+1926f990","ipfs-client":"^0.4.1-rc.7+1926f990","ipfs-core-types":"^0.4.1-rc.7+1926f990","ipfs-http-client":"^50.0.1-rc.7+1926f990","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1926f9906bcff5bdc8d417a7212a9db52ace7e3a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.2-rc.3","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-SgYUl3V8LhgZf1MVsMJtVwLr4bCZQhzd9YGwsr5Om+f4wrUyfB/5mZUHRtxMmGEZihwPDnIBJb5lfMelegB/yw==","shasum":"eb5d40d9f23442b2b5a9647eb98573ddafc97833","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.2-rc.3.tgz","fileCount":10,"unpackedSize":2073118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrQxpCRA9TVsSAnZWagAAy78P/jKHAPNsA7bTFp5FpQdN\ntfmuMblelLCm3424W1XaTQRWwMZbnPGn8meirRPPsL1Jzkzyor9WyTHt+mTv\nvBY4pMDE+/rj1cpwfmO44baEIxeJwYiNQfq3PJL8td7eFu6YgSHx0w7qxYx6\nrE+r875QxL9TTevAKU3A8/TBexAKzhWnJQELj8P3wkkBWgAILJNE5dmPii+3\n0aSSiEhn8FGx15lA2+OAfRKo4w+zinxUxDChHpwc45faIWg6SBm17vqzW47c\nqSul0hPDU/Zc6wDBfv8VpTVZpLTGl98gALgqkIO4oUYWzkK2NbPubfF3x5pe\nu5fWn38yKrwbfWKDnQhUvnaISz9yXyEgnPxfMyY0HnG5inAC0bjFvc8fJ4fk\nfHbjRUwLzssHLANRoOx8BNvqeAFu8IFajjRvlVIyDUiDDGq78hvWfvm38Ft7\nUA8Jp4IafUsNC+hY1+hf0uW4KZED/6G/frMCcT22sIP6x3zyAprzbO+FMr2N\nHO++Yt3jTxphisYRra7tX5o1bGTJ2ZCvagEkWL3ueJ3yTdu2iDpl+8hFpt2/\nLpIlOTkakXba4t6duIQ7HVD3GU2LOhDc1ywlGo3E9q8C/lDU4HlPcecXlpPW\nl9cgRdrzX0luk6kuaRi8voyRw2q+RnauyqJeaFFmEZfXEWPqzHVuccbXotWh\nxTas\r\n=Sf7h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICyahx1gOl4PQWSz/JsfOhMChABkVi2t1ovWYZt/F0RgAiAt2+/H9QKMagL6ffYJQ9qnV/f2LMwdaTAv+BsTqdOWNA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.2-rc.3_1621953641201_0.04268351270277804"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.2-rc.7":{"name":"ipfs","version":"0.55.2-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.5.2-rc.7+e91a1e52","ipfs-core":"^0.6.2-rc.7+e91a1e52","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.145.2-rc.7+e91a1e52","ipfs-client":"^0.4.1-rc.11+e91a1e52","ipfs-core-types":"^0.4.1-rc.11+e91a1e52","ipfs-http-client":"^50.0.1-rc.11+e91a1e52","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"e91a1e52b86fcc9ce5ca5881e8721863b58d5d9b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.2-rc.7","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-4dk15R96YqhZan8XVTy8u8OpyYXLu6r+/CiKuG6a47FXkSBO147EUYD0eUZ5vmSHwjPHfoYHd++8hWye0xrSHg==","shasum":"f2280f8bd7b7d0a93512750bd365ce622c129336","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.2-rc.7.tgz","fileCount":10,"unpackedSize":2073130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrSCjCRA9TVsSAnZWagAAJv4P/1RKjvQ7B58/YoY2KJtZ\nOEKgzAgcKzqrN+z8gU+iyIkM48UcGPg+tewY2OmASBbEvZBf3+9gnBQVYEgt\nonGcwHVgvheMZljZ37Dw2OSSITJbSnVIkpgw9/oPJSu/mI+9DX8otl1iODQC\ngzQk6hpLqrW+qEVeU6xWwofKGjxNDWyh4Ws0EbDfnHnL9Poy6l7IS7sqG8cR\n581oFRnjP/gJ+BQleacdSo8evku1+wldrbL0yhvt7tP4yh1vKl9obtfhj+w+\n+zzBrczBdv4dcCREARTXW7ZTyQ3vn/lky/EunhIRdIJjK3niugpOKZiSbdxl\n9XPypBCeHqrPIyrxlPI1sgFbTgN++917tP9q3KyyjiuPOwX/M8Rx3QLfFy5g\nOQ8+t6vMmXdJmBhiVDs+Dl7iR3uthiqs8wq5Fczc0oZA7uY5tDtHsBJTwvii\n7ny3zHjXpR6+sk5gD9mTLMZg1QXrkSXEYuoMLqEf/SyeFw2puFHkxKsqiKfA\nb2stipsWG+L5caU2uxlD44vwKP2Hb26t1qVR5Ow34aMvsTTgEFV3bLR614P9\n0WflK7TVkVK57JmRD82Ze33ODRHS7WyfNUQA7xsnh6+iYixQUnGlLJZegRCe\n9xXyDIle2ds+kBcge1cYIwR8tklYk2owULS9yhBY4ZELwmL8jPSKmtAidi6g\nqE6K\r\n=Xiy7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiFA3JNmDuDqs3Lfrs//7X5dPooj01xnuWEez6XZFRbwIhAJv+Pzm5iU6FU83/t4+GcFzF4xi+YkFpOu9wNuNNBg98"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.2-rc.7_1621958818682_0.23198591281538072"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.2":{"name":"ipfs","version":"0.55.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.0","ipfs-core":"^0.7.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.0","ipfs-client":"^0.4.1","ipfs-core-types":"^0.5.0","ipfs-http-client":"^50.1.0","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c40960358550b920d3291b8030715537a63c63e4","_id":"ipfs@0.55.2","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-Jd07ATB/9LbHwceuRnO0CurA3ynUsSteh3vqh/ZN3+WmOdgNCVqXiS8YaKzKhZjJl38hNH3CHrupptBjea3Fvg==","shasum":"250e4da879d69db4d20f864a312a8e2a5daadec3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.2.tgz","fileCount":10,"unpackedSize":2015156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrhhLCRA9TVsSAnZWagAAnNkP/3+YUjPkz2umaUkVA/jb\n3RplFq6eIonoWAXbE3XSsWg4t1BCFwvN7FV6447yGaDHWgpyCGwIP/LFypvE\nOeBDJCBpjXrAJNjUQu59M+5uFpKLPMWhNVGUK0F2Xm5oabBFXGY4m7AMc+zN\nX9vNG440pcv3wIyPUICysMzLIAINnCmk1U/c2MLFKuRPk87/UQNcwTUSKPZ2\nUqg4OOEQ4uBwhUM3OtD25X2s2kGHdu+nJl/HLkhLyToCugR2APwvPQEiXWlo\n8NaNvOZPmn7Kgs35/lBwXhhd6v4Quty5jfAVweJ0aXDSHMxRUjMxSJrot/f0\nQ80IkE3YmDifATuTIILIo1xBEVBFgPVf+HjxZgh9s383302FFp7msx2FjO9t\npKxHbOGWmEE55FBWtKLbblrmIHnEMn5ChAKP6CdsoWallA2aEypGlXiawE+K\n8QYzhDZuTE6F+x8y9PWVQC4opkluHiSOoXwG5BzNdH2VjDN2ElEs/HrUfxeT\nLuk/CzDjyE9rx8JWw7uBPTOSSjobIYzu8t/JbDJvOHE5/wr0FaleVcYISlgy\n/VaXjdmIfuZEn0SazPT9IXMFKonZXV7bnwlobZ5piSov1X3nZ5gW81M2vInv\nkrZNKYRJ33IN5ntrIKOAGf4fCAgCLpOPxwcrqzE6ZjYuI1GWdn23enTqlex5\nuztj\r\n=eCsw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDiha73SoB1wofiK8XneeXLCEnUuuMDiz5Hc7yCF3hVYAiEAgMUXdsNybUslv+EzVvk1Kco215UkwbmdpOadssidKqE="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.2_1622022219282_0.02579985933641482"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.3-rc.1":{"name":"ipfs","version":"0.55.3-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.1-rc.1+48c4a952","ipfs-core":"^0.7.1-rc.1+48c4a952","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.1-rc.1+48c4a952","ipfs-client":"^0.4.2-rc.1+48c4a952","ipfs-core-types":"^0.5.1-rc.1+48c4a952","ipfs-http-client":"^50.1.1-rc.1+48c4a952","ipfs-interop":"^5.0.2","ipfs-utils":"^7.0.0","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"48c4a9520e4ed668f4eca2fccd67f9849e967286","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.3-rc.1","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-Ecg8w1SqaWx2OCPZRKvfRCKGaDY7jZ7Mj/xrILyLqpVdZ2BqhRXD+q5FGEMRMUSSP7M7Osk4tm1LOrhaflV26g==","shasum":"6746a9bd3457f56345ade2193525d494db13b310","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.3-rc.1.tgz","fileCount":10,"unpackedSize":2045622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrj45CRA9TVsSAnZWagAA/tUP/iU+Kfbphw7RhhU8WJps\nLn7qnRAmg7ez9Rm/gUGKD/8iko0D5eZEHLBd2Axn//nsZNL0ynWT13nCvHtT\nXEuH5BZH3yuEXIcus7pyhzOfHNuVoHrTMflJyxQG1qG4voNt3drOpl1sb4XR\nu+GtHcLvf4OzACyAVI2NGRLWa3PTHjsZ7JkJvWQ3RaeJvl31/WTyAjhyKQAu\npKsXUWPJJ6itHOMD1ddQCIGN9fxGvUtpLhC4FG371+tOIldhAN04nYwtfwHJ\nOM9UKYTyB2DwSJdh2zx/vdukY7Yu7Hxwf4wCUY6RuWUCdyWt82rhRT/BvrYu\nux8Rl6BBQUm4z2tREsqEOE5HF8YhjMwNphQ4faNRAt4i+PXNdvs6aHE1hwbh\nZcQdcF9s1ayuopl6/qW6CkGBZkp992KSO3vrd/JjykkEzNvhB6sqiKbL4Lr8\nEiS1p/jqxkdpo7ogHpaT74J/YQPH5Mc/xggw5cRonvLv0VXAuuwc3o8XqmK8\nlRUB/BB2zt+WjAu6ZueMuSmTHDhBqNKtUVwFjbw3M+ITZp1kjClaH0cT/oId\nLuorEm7IkRj4WJ2E0NatvLRjNGGKwDoppTiVx4U9mDq5xoZlKCKp60a+A/Vy\ngAZQaUCyIu+qEth3Bpr5csDO63Agdlm9mZQguYOTJouTmGm7TX3wusI01hAe\nGJLd\r\n=7uIM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCGAzGaelcjQW41+fxVCZzjOFPXTZbNXURXgSITkcodQIhAOEneTA51TtR8dUcOh5vIH2yaf0xQn72O6226SwTyvn8"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.3-rc.1_1622031928717_0.14932612720431448"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.3-rc.3":{"name":"ipfs","version":"0.55.3-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.1-rc.3+ff56373f","ipfs-core":"^0.7.1-rc.3+ff56373f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.1-rc.3+ff56373f","ipfs-client":"^0.4.2-rc.3+ff56373f","ipfs-core-types":"^0.5.1-rc.3+ff56373f","ipfs-http-client":"^50.1.1-rc.3+ff56373f","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"ff56373f0606ef2c59a61916f02e42ff524f16ac","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.3-rc.3","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-VaeSaYYVXnouwOJSCnqWCj7vCI6tCorrnpkSU8I6z48HZn4k7kSPA1XKof31p9MnLlwrsyJbbrix2J5jDQjVjQ==","shasum":"2a02447860bb7c28d8d36cf81c572cd4d37502fe","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.3-rc.3.tgz","fileCount":10,"unpackedSize":2049177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtpsTCRA9TVsSAnZWagAAFiEP/j6roG2LqkEotFmuguo8\nnqE35cBx96sOo7FU2jUvW6K9RPaJi4nRgCl6x522LVvUM4RyQXKa9Ri8GSMU\nHdW3iWLHl39f4Yl+cQMJBvpY2qFCmFwU88Q1kWu/+uAE72h4eYDnvbqWFZpn\nH0/aX+aZ9yqh06STyzgRpyZA2eHzf/8FA5+DxuIr14emcnOBpIABxV2tYBao\n503jyQRK6vFoDmQFDUtGW6wmOimX8YgWC9F+OGm9YfmHPUrJSfVrHOX2vDgd\nCqVyUStFiqjOpG9DgnH/BDyDhqNbIdkbxh1zYzLHP+ucOv5m5ZdnE+vcoeBt\nQmoouh+pPKqLf48Gkey7dW62l7kft972QqkLtLUrNnT7iOHNvrJiaXYqtYDC\nb5w/Tcxk6FZzY/dgVM8sCdXbs4ipj9zNuh7CAnJJGwtJH5UOGoN5xMnc3hn5\ngBOBMTqyUzH39FA6HzT9k6E1ndrMAnTClJ/P9L0XposeHLEvOHGUC4MaudLl\n7EZaNR1D1MBmz9/TEMiO5wqMQSnNu0hZqVFmzTQfOcJJtsya3G2g+RrUoggL\nZ4ivPf0R85kJjQHk6UGh+uVTAAUpGNq0TXCnvxHuTxqkG+hBxbfzqfEWgSN3\nWxXl+XP2YWytnYderk15f/HOiNAwDaobBOqrC00ip0n6I8F5KhdmC46hCSaE\nxlp1\r\n=JBhH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDE7z1AJw8du4zgDvXwX3gGB+OmMCARrsQnZf6xuqUwywIge93SRDgJx+zh6VNA2hGAmn+yzhPlX9H5XVs0jQYM2YU="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.3-rc.3_1622579986570_0.4558661077763231"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.3-rc.4":{"name":"ipfs","version":"0.55.3-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.1-rc.4+c4a1aea5","ipfs-core":"^0.7.1-rc.4+c4a1aea5","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.1-rc.4+c4a1aea5","ipfs-client":"^0.4.2-rc.4+c4a1aea5","ipfs-core-types":"^0.5.1-rc.4+c4a1aea5","ipfs-http-client":"^50.1.1-rc.4+c4a1aea5","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c4a1aea5addf902506e34d3d9821285ff0423710","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.3-rc.4","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-wK4Ltg7JSy8yINAZHdWPXrDVw6Xfu5Ct6jwatHM1lXPyajGYhM1/8/L4dG6/bS2w9eGO4rPUQkHN9sNvuQVCow==","shasum":"64a165517c374663de738b37a8f63eb907f301d6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.3-rc.4.tgz","fileCount":10,"unpackedSize":2049177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguxcMCRA9TVsSAnZWagAAM4EP/ir5FtUC5Y8ysFeg0a5g\nW943sOEKtFawXtGSsQfHm+XhNdNl/jPHiHBONIkJ5uSpvQ3BAMsKj0t/fAgZ\noF/N1hjNbFsXPQ5arVDiJ0hT7IjxaGQq2E2ErSW9JnVp5VKLsRWIFrgeuR9+\noqhczFbfpZMdVyZB1PRmk0bo0cmc+NXYgzvDXer8cdcF4QoLfucoINNRUeja\njgp1Vvf4LGruu9dcEN2R8tbydW3TxukhJkCqA/TXSgXv8PZMXMRmSs9gwSst\nfzo64CN6I3ovoDvMJffSdllLTURS5blFYBuBvLKncJMaOpVOkD3vnyM5CPQS\nLC5V5cF3JdNnD2ykQjYqsTU27z0mhHSeqBvcObRKb5Fz7BqzaZwovrDXD6FL\n3JaS+aBw+bX6ue+Iii6RyKECq7iSw0tuJNRZbOCnks7aKuIAh2SyASTEhNb1\n7BDegFVv/vDzNAGLUYWSpSunK+h7c9mBuq6lDVlQM3xf6rc5V02fHGTAMIOc\nXGZTzWZ/4kOlQcQNyPHFv3ng7W5iq1E5vL/CVCV46F+lR6NhMptU8PxqCGZP\nWjrebxLjfSDg6TorqCK1xDV1lRRuOuDp4wAZUlN2TmsSiAuJHzkTjrpUMirr\nWc/HP9twWFVdq180/Fy+I5L6kDyHc0npjHbe/tAOWbWl8h0G9oLw52NDfOtT\naGs/\r\n=+Sqz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChn/GveATQmNhGLpLV4qHehvR7xt6N+T1t2fzqXfslpwIhAPZz+Z/HNS9APpK5FYijxBA170VvPpihcv5mml1Anp4c"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.3-rc.4_1622873867931_0.6390808912805614"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.3":{"name":"ipfs","version":"0.55.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.1","ipfs-core":"^0.7.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.1","ipfs-client":"^0.4.2","ipfs-core-types":"^0.5.1","ipfs-http-client":"^50.1.1","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"08be8beb2168f39252affc8e840ff3e185c69a44","_id":"ipfs@0.55.3","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-32xQmO0EUy2JvBLJuKG7xHiHtHO3q7zg2zHWduWu4kKcCxp0JquoxW+Z6cEHBD6R7qVYASuINK/DUTTsw+SHaQ==","shasum":"84a42b688910d29bd41eba5e798a7843755b4c64","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.3.tgz","fileCount":10,"unpackedSize":2022657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguxrHCRA9TVsSAnZWagAAKGEQAIZjifHR2JxBWDvhXU/o\no8v/O/JlfKh+usmsHvX7SboRk1ZSakt4IAyO1oppzGh/cRjach90RX/9lVFQ\nn6mgFoLOOgE1GJ3PazJfVfU0ebmLfkt/Zu7AI/7vwr3GjURtfsaVLA6eihHt\nX/qRkhmCq0hcAHnFtWvU82MDLhT2igL2rK+XYDzuD6Vto+ZT7xQPUhfc6+rd\ns5JyDw1c/FEyyDKsLY4Orzguhv6VAyvV0+cp9NlNlBNMR4NqlzYI+UI8JKpn\nA1UTkTF4GJNfCIjs1I0iozb4S7VJ2qxzxeRLCB/AmrmEhaxwrtNtIXSOKqqo\nz0QlnfTviOCit/8ldMNFUiiQ744D0fb/JojCxfmQhLYGkU0gSwT+1ieRMoc6\nDO0gFbFzYwOLVK9xBHqrbdrBJcXRWdftQ//DVPlYAyvuN6OV8/4A3eLybXTg\nvoDQY+tTSIX98GXOh0H3CZssfNqDN8IDGkQHnKxgib6K1A8uBfgYiNTCHp0w\nCwaz63aX8WhTOZeLuG3xIH5Ul9uLKnmEsGhrjCSxCXNvxj1EVJzSYh0iEsoV\nf4KAmKToK8SatXwYSJTeX0aDrvtiohSUqy2eNCAnjyenkUSSYKfVLXmwA8er\nLkCYXHT0oiMv54lRGNL7iwx1TtPbZMjb3tiwBCBrQMqQwES/QSO5a8IxSbgF\nSG73\r\n=yH63\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx2b4rL2p0GlDcUH5ttTNQkjT2jQpN9i1eCbrWrkkjCwIgH8SFMX2VkrhQqFny/qnnl8yT+KF488Qe78jIHRjFAWI="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.3_1622874823311_0.7716183177778297"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.4-rc.1":{"name":"ipfs","version":"0.55.4-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.2-rc.1+714c3de1","ipfs-core":"^0.7.2-rc.1+714c3de1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.2-rc.1+714c3de1","ipfs-client":"^0.4.3-rc.1+714c3de1","ipfs-core-types":"^0.5.2-rc.1+714c3de1","ipfs-http-client":"^50.1.2-rc.1+714c3de1","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"714c3de17f4833b8dcb7c0ff51536661a22cd6e9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.4-rc.1","_nodeVersion":"14.17.0","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","dist":{"integrity":"sha512-GSBzQjztnbMEdIYUQn9ghjycYFJpZ/0qC/jjFTKBdrzf+ZmIL3VbYukuwVERfm7CTcogIwmbjBVNwN0eeDjHdQ==","shasum":"692246cd5df5ea32d559a71ffaa4fd10b60a4d65","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.4-rc.1.tgz","fileCount":10,"unpackedSize":2017649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwdrqCRA9TVsSAnZWagAA9e4P/i1hl/jcbCBs1qNqIYg6\nrdyeTUWVWaVW5STE1XKDITPVl0qEJkDMda3tw5NYwRkKjpml9qpSkHFqKlvf\nX0gK59IFZdDJkbNDSIu/zQOhDmscVloEh0CVkEjpEB1OZ65l4Lk4/wDAMm9V\nyLynOgJn6EuSkiYCdBMPHAZWT3djkOPmGHukukLjB0P/A6Cfok8UpHXnE2Tm\n4TmTi//atEsCoB7LrOdxT3gDOnnOLuThAyMqyi9meBMXA/DVuEmPZ59TdfCs\neyNh7pY0XjU1IZAW1PW+/nRpGUV4sG8oJauM/yZiZHjsKOmmdlK0gskjVcZp\nzfglgw/+ZdFog+a+0GGBMIgqUVe01b8ARH+lSAYntMVKnAnzW8aF4mWArkwn\nb6g+eit1c2pYf9RK+u+SY4ydky+T5UbqOTZEYCz/vUfh/XkS4nNWupZLZ0gM\n70KB7tZL7OwzhUeikNlNOgxr40a69ygrHORqv4wdZaDCPg7dbsgrthgaHtHF\nfa+2oXUon31VergGaGYyDE/tpaDAAvRwAMpt+HNpSCz7St2Ny85fGY8dA82u\niSQZsHN4r/EZ+HGJ/PpN1Qp+sb9w4C9nUNfJua5fXzC6S98lZIMQBLoG4y3w\na8To6ykbS8w+ZeajKv4CweF4oUc54VGBIi3nVBtpwY9bzZLrfYezPPy7eqre\nZOkA\r\n=DvXB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4fJCl+jrl2JFoNVu1fCIe7W6VyoYGFffXGtsHJjQbgQIgcnBHovHVzkO4d0pqTSjaPWbBCR00wbPufzzjXe2ectQ="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.4-rc.1_1623317225985_0.972381060616148"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.4-rc.2":{"name":"ipfs","version":"0.55.4-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.2-rc.2+bf44a037","ipfs-core":"^0.7.2-rc.2+bf44a037","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.2-rc.2+bf44a037","ipfs-client":"^0.4.3-rc.2+bf44a037","ipfs-core-types":"^0.5.2-rc.2+bf44a037","ipfs-http-client":"^50.1.2-rc.2+bf44a037","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"bf44a0371a53325a8ed10c93ffd3514b995185d4","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.4-rc.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","dist":{"integrity":"sha512-QASZoY2l152N0KyCRfkT3iWAPcplonj28jYld8FYpARukgspbnDbZ2Mr4ZoV5rnjIwZef4uswBV4VSKBQlG50Q==","shasum":"0034dd3d4dfc6fe4e9165a6e4c5275f2fb55c1e5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.4-rc.2.tgz","fileCount":10,"unpackedSize":1831112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyNoaCRA9TVsSAnZWagAAneQP/0V2Sdu/0eQoHwdjkVBJ\nz4TFQ3v8P6fqtgqUvdm3DP+HV7GfFOFu7qSkhy/27UaN/lmN/6a9JuvC92Hj\n/5HBqoYW4VJhMe94oH9/CT0ieD5WUo/EYBGKANdoWszFm2vNcNC7KK6kewjW\nh0MvKNbph8txIOUDbtSG4VPWLiaUcul1XO3kTckHD0adLASsV/GIjZKb/HvE\no5HZ0KKsaEQtgfpWVwJP/BUDjmEXP2Ubq63xcpzPLe2ciYtuZ1RQ004Om0sj\nMNGRvJNJsKBH4o/8no44+XUpw2zYNlzbWOmiuaR10vcs5/9Mv2FViXYDTrS7\nYEPZAlcVh9NuIOKVf/rKQL3uiSUpPNXHMbJ/QuajI48enMq9wblDO4gFwLEd\nGn9X0YWKlXZssyUIqkcPYSw0j9r7dOzUXSXo3SXaLVTrxLdP1GRZi8PNQgqu\npvL5SPShzkBb5PmoFqVDbjdkfvGa7XMEJDVfXcOoXTa0urdWZRukUBzcddzx\nGJLgBdFQJlAXTPcSH377dFMwRMvs6nEiwmWg9Kk9gbVrU/h591wIwmAtYY9p\ntXMX/kDhOl7JdTCxgPu4GxMlmuAV8BTdGmgT0VXRnTyGWid64xVEDbji1BB7\nDo22F7AnsXwbZ2Xkt+O0XA4Nn85MTXj/c95KEVnqmOjBezqRSfOmR2EXRTmm\nfZKb\r\n=Xp87\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDANJxWT8TENww5QssRQFuIoNaReT7cNSUl/8jW13KyjQIhAKfGhdoxn7dMnfNQlVvOadSyZL38/iwsg/Q9U+RfL/qN"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.4-rc.2_1623775770638_0.38876632060617067"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.4-rc.3":{"name":"ipfs","version":"0.55.4-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.2-rc.3+b1bbf5f0","ipfs-core":"^0.7.2-rc.3+b1bbf5f0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.2-rc.3+b1bbf5f0","ipfs-client":"^0.4.3-rc.3+b1bbf5f0","ipfs-core-types":"^0.5.2-rc.3+b1bbf5f0","ipfs-http-client":"^50.1.2-rc.3+b1bbf5f0","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b1bbf5f004fde7a26f8cbf6e0bd7356f07dddc94","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.4-rc.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","dist":{"integrity":"sha512-zBTAx1h0ajTcQnfXunPpUxSDaPuzbqeQRN1EFUazshTvFeuiL6Q4RpFPDvyJLFJJTu92f2MPOaIbY/le+TFxGQ==","shasum":"7899a5148d45aa2c54c31a916a04f36dad6405b9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.4-rc.3.tgz","fileCount":10,"unpackedSize":1832126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzFVHCRA9TVsSAnZWagAASdoP/jaVSnZPR1jT3Qd7BabT\ntviJu29WfdGO5rwNfjSIrfqqsAQEl/stEUTs17ppig2u2C/UuiuYd8VNRL/f\nGHk1mWvI6qlIJYaWymLqe0O571NpSKwPtflJmT3pJzpK4SRlKsf/9dDxFeUK\n7NZv6Z52M16o7uQqb+1xGkyeR2rwhbzIjtiN7MbzgEMq7NyIVujpBuaymhh8\n6ofAs9f0coClvi5Yy2Np8t+HDKWRKb0xbjp4xWpWHI4kXpC6vgJ7H7xuxB94\n9aXCOX5vhHWa0jlp3HOdaiHEod3sA+NIRQhC89/ZR08i/RGT9UUqOAmf1asU\nTBOD5gGhzgvb9uJO7wTaXTOwgXzt6M/Ro4nKR4IonkVfJdHK3Ud4PwEkBlgW\nwP0/KD13Ku4P/pEFyLYFipWmJkzzx0ML/UzU2Le2UGL9j1WeG6SOBbWGJffc\nJneG0TTnq97MH0ooYgX+U3ErU3+Z9FLuvWfQat99Cy+dc/wA5r83UiVOEmGE\nEgft9RxiGnfRoOhFFuyEuE+aPBVLNztjJH/lwCfiuNAHvD7NrTqgsVICgamY\nK8Hsu+EmGIegH1czKiItRi+I5n7lMYEcT4zVl4EOK89XEIef8N0u/KlWeuXg\n7G1lD5EycHGaL9Xczz+F5hHUkq6Dd4Cwb2q7k+LYmJYF+slL0Wo5vheaIp/f\not8h\r\n=rQpG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHB9QGfTfxWLuhWsTZ2Q/qiA+tU4R0MnsQZHBND4dHI8AiEAn7+C8Z/I2QleCK1JMCSl7RYMQkf7MiJ2zcwIO/9+K4g="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.4-rc.3_1624003911341_0.3078960570978335"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.4-rc.4":{"name":"ipfs","version":"0.55.4-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.2-rc.4+7c1afbdf","ipfs-core":"^0.7.2-rc.4+7c1afbdf","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.146.2-rc.4+7c1afbdf","ipfs-client":"^0.4.3-rc.4+7c1afbdf","ipfs-core-types":"^0.5.2-rc.4+7c1afbdf","ipfs-http-client":"^50.1.2-rc.4+7c1afbdf","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7c1afbdfafcfb81f698cea35cfa0e392711d40a8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.4-rc.4","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","dist":{"integrity":"sha512-fg7vPZFXBK+ObFnKP+gg9JGh4KydE744VYhAD7eksjVM2d39UQTtHlXfOc1nCZwiCXU6SBKAYNxzdhj6lDqI8A==","shasum":"d424ad7bd955f888cb3c039c6047338eb1c14b89","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.4-rc.4.tgz","fileCount":10,"unpackedSize":1832126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzGWcCRA9TVsSAnZWagAA1gkP/2zyokmplNDkorjCKOw2\nmXDgSqwD7T4cmlqBFNpcAlGVsHyTc49LFaGDC5KT3FTCZYiqjnw5OPw6LFkV\nfPy28vVvv5ciRXeD4AhPNQqoC9kIF+faX6tXMPf39Ax5ZLld+yB5jH5nDyJN\nHmVm+I82B+PYVsmhvhVE2CXr3GxWkuxtqk2dFpE+WjyHUyLxUfJBSpVsz4/F\nLGz2KgcEOVGfvavi4aeWcGFg6VN1R8BL0K84giu6gzmOLldHTmtcsnAgW8Uj\njOrSugypvQt8zEFHJCdvRv95YxCX8xuDLpvSizPFXKrskWsjTG+aD20cZYW8\n0MEo7hi3SeiR7IykauBlDE+fk3BBzJFau/Ke2KZ3UkPX1q0L1yqNKuGA7OqC\n7/FJUTdjMtKcIbC44tYNVFrEbCkLtptlGqhCpInV3ogcSZGDakFZmRvAX82A\n6NcftK6NGR2pd3654fq2X7xL+cRvrb5LiAy8AO+YbvTzXjULmIlnEX/sxQmu\nwwB1Df73jnQfFfyJzLfM+al0nEU3Fs2haYtlnMzigw658TcEm7pAc5aWF3A2\nH02N41vXAR+rLqCd+5l8GddUPKbCIco1SYCYq364U7LSI+kh3/vZ9oeAIOx+\n4gOnEnGRROpiQP9IU9CdTmCylsp3QlRbueuvBpysL7B0RbPx5lt005dUYvrr\nec41\r\n=NWGh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcJtFq8L4G9qwpBuEmXYZ4et8hUxZ7uubg6UwHqo0KnAIgAY7mLb49u04lLCwJAdDwSlomITr3Fi8rJ+dUfTDOBrA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.4-rc.4_1624008091665_0.950532137732589"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.4":{"name":"ipfs","version":"0.55.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.2","ipfs-core":"^0.8.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.0","ipfs-client":"^0.4.3","ipfs-core-types":"^0.5.2","ipfs-http-client":"^50.1.2","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"81f944163f5a78ef15fdc23b2c488ba7f44af0be","_id":"ipfs@0.55.4","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-pdTNtoalVjQjhsZPFO8s71bF72nxRn0L/cftfmKqUKlP7Z2WZZmqo+1RbPy30jRvTwuhLxLskONoTJaUW3EvjQ==","shasum":"3952b42642a7dc608fa63765e161bae597596345","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.4.tgz","fileCount":10,"unpackedSize":1843827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzICUCRA9TVsSAnZWagAArKUP/09G62d3ELpHEykFk4iH\n+U94xcTTIhVxeQGm/+IRcTdggT/03v7+f1/wIENhNbSDsD9WysnbpiJ20Vp0\nZIcVnLPe8KxEiIObwgAfqchWqUB1L/cai70GOneG493RZAL7+xInN+ADJxcV\nLpn1owX819gc/diZgGe5uqzTYoib5e7b0EgwoXsN7uQ82MkQleKAhazyLX0i\ngGNvrfM8se+lSRR6yjRtrURN/DkKmEz+jV0zdEAyvfLnL8frNkUVIRrkG6Td\n6SJ9POLOnLWQYHLgZH8YHet0SA0c/Hi5P0te3/BAxif9XyM7fnQd7DUbmO0w\nOfEEFPOvyGY3XS8jeMZGUT8tvfqK4IGBcLs2Y+Pb+mWDhJNkSJSxte5GQBG8\nR09TqqBEq4vON/vbc7XrkXPUQQlnbMVqn+kKg8E/3yNGUffrg+v8ykOo+lvn\nnpF1CZ7SM8cbSZWtWOxpz5b3cu+fTjyLhl+F2C9sm/IaUHTTYZKtmKd32KNN\nQjdcnRUW/sOJDIOCCxw1FhpnCgVLHypNR7HZG8LbHt04J5o2wnQ+4EJrxbKS\nXO2T6L+UiHe9aNB3iH/TjrleedSoYO4lXnCP0g7mSMiLBIkhYnUGeQx7CE5s\nyqwGmfb9O7z4L3TmQmGGoND6yTe25UcTuZ76MeydU7/hWq5sTiSRfzZgJ382\nfJUF\r\n=sn+d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQZQMOAiXs1XtxhVHGc9zluGllKIQRX/A2ne+if7Y9nwIgJwlrtwYNX7HHzQHK2C4yH7IfCEKhAbOpYMUvZvYgdbI="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.4_1624014996301_0.4865895219280303"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.1":{"name":"ipfs","version":"0.55.5-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.1+f4b2a8c2","ipfs-core":"^0.8.1-rc.1+f4b2a8c2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.1+f4b2a8c2","ipfs-client":"^0.4.4-rc.1+f4b2a8c2","ipfs-core-types":"^0.5.3-rc.1+f4b2a8c2","ipfs-http-client":"^50.1.3-rc.1+f4b2a8c2","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"f4b2a8c204271922ea34ef8c060592eb56a2a1bd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","dist":{"integrity":"sha512-Tau6bdiSOa1VRQ/jaABaeDHnZ4oJb5HX6ixi9kTBfmx0H/jLCDS7XRJC4/1ZQa1HFMVPL9QM/Mc/93Tk2i1E4w==","shasum":"5431b011f167cb1e9a02256ef6f3cdc14ad1049e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.1.tgz","fileCount":10,"unpackedSize":1844665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzMKpCRA9TVsSAnZWagAAl4wP/3z62fXUzoUevKP2lbBq\n8hGpFZoI3GLGmBr2GZKHNeZOXmDx7EP4OmKC6Eyx3ERVLuYs9EKxtIkJHC9e\nzq3Wr++DTGqgC28+HnqEoGPwdGjGJ+2po6x5oUSCWv80Zc0WlVxWvTm8MnEg\nGMWhfmEJX/sg1aAQcBs41sMZawQu1teS7I9CdeefLvayCzMsZc2maAtWR2Ln\nV73s7oYsLt6/qwnM4+2gY+iH4EJnXKZxP5onAH7L59MYcXEwYaDKrASsWuvb\nCGE3EYQXcE3RXAJWLXxplbl5MgCYn/fVKtbspXSQgFB4nPQF2xIOO1jfLPaD\nTq2gvvYkE/OUesrgbn590MTO7GavSGMuMf7MTqgU2LnWdvNcZYME+A3W5A1c\nIgEbUsFIBALZkPz4wZjXiGEujHZ3M7gg0umjgncEmzrehTfjPqrCHjCX9n5w\nhHGYAwy/8srZKYMvy7rvj1kl+dN+El3Pz65SnBACdJYFoI88Mjg9gq+B57nx\ncwrDQW2YpPpSbDHq9zBkq39zZ54SCHqVKWrXQ8zaQaMKkfxSvk7JAfPIgbQf\n09ZSYBhUTh17QswN40eNQQYATIN1KWv6n4/f9tauh4wkFuqgypZum1mp0uH4\nGdFUz1SUKWLU1acoxqhfr0ecQTGKEMsKD1o68v2o34AXkMrcr9mZxIhRUGqk\nRdaw\r\n=5RlZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFLmd/KG0FmU5CByS+KPXUv7GJj9/2f0SVSsequau42hAiAa7TyobgjqPCRhiBeML4oMYfUQAeXYRY1hX5Liz1F5NA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.1_1624031912899_0.2764105778781005"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.2":{"name":"ipfs","version":"0.55.5-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.2+4a4a360f","ipfs-core":"^0.8.1-rc.2+4a4a360f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.2+4a4a360f","ipfs-client":"^0.4.4-rc.2+4a4a360f","ipfs-core-types":"^0.5.3-rc.2+4a4a360f","ipfs-http-client":"^50.1.3-rc.2+4a4a360f","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4a4a360fbd368b8b27653a81c9301820c93d91bb","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","dist":{"integrity":"sha512-KX62mc550CJkkLQRQOByuHUlLENBXlRWlldLEpxqS0UDmMBdzsBhiZHbPiS2ZcNp8ztzBcrVhIHRZQ4fk8z98A==","shasum":"5735c9e2d82bd09ee886677edc0bbfab6ffe1382","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.2.tgz","fileCount":10,"unpackedSize":1840814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1fLNCRA9TVsSAnZWagAAVZUP/18yojPpKQua71EYTJ27\n2wvRZ+HfLzSensg1Guzhmxh4sMMKMurL4zU7fz6gnZepvuigWSwBrsGYUA5v\ndU5qalY3T8pFFtOaH/Omq5BM2E+SBWrohy8okV302aODX7rHAVnc1JJFx8Y4\nCFm8Pf4Fm2kvAuzFy+fMA5Vlk18Mh6SvBkOJm1hJ+G/eQgMZNO0QOezooa8V\nnIIilA0Ts49DT/ZNY4moDL+DuczKGPoWcmmjcg2K5l1zIlSO8wsKFshLAfyR\ndof8WrFmUt2A5f5R/sksQOi7c+9KOCQNSyekkqJ2RGyEHaOQsxOA/GzkAj4T\n8wAOsLnII12DrVkdjVQrCMIiAM/z+lMBabC5dnS5NY9G80noU5R4R1fHXGPz\nZo5RUsrUhw5RO3WpR0zdle00oHgeWVoc4BUlhwqBwZO/MWa6DtfI7dRI3SSW\nKtq1nXjBN7aqpZOPSK1xOscReQLZRK0dShpJ3Fib6QiUjkgnXA/w+YZhB/tq\nifNMLfmusEHtRXp+WXOA/gKKC2hCcjlt5kOeseyuNGdLGr+rnkq6GXEXe/7O\nK6CTuJ2srPGbedAylA/rvBxm79hAJu9EdXlOIGXWPaJsWvhZJcBVJmRYngFs\no2wFRE0MK6jjujOitmyCh2738vge4JzR1uXIJjSWL02/5BvalKNH/UuHfglJ\n14Yn\r\n=ygk8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGe3PedwFwinOXj35Va2FgtNt13/j1KnQimBRvTnWtmMAiEAs80dg6vxEULR4Z1G0jlkViY7sgE8FW0GKkZ9igDgRdM="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.2_1624634061177_0.6481116677497609"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.3":{"name":"ipfs","version":"0.55.5-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.3+88dee13a","ipfs-core":"^0.8.1-rc.3+88dee13a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^33.0.0","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.3+88dee13a","ipfs-client":"^0.4.4-rc.3+88dee13a","ipfs-core-types":"^0.5.3-rc.3+88dee13a","ipfs-http-client":"^50.1.3-rc.3+88dee13a","ipfs-interop":"^5.0.2","ipfs-utils":"^8.1.2","ipfsd-ctl":"^8.0.1","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.22.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"88dee13a9246d841648d31edf0db62e4a4f859fc","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.3","_nodeVersion":"14.17.2","_npmVersion":"lerna/3.22.1/node@v14.17.2+x64 (linux)","dist":{"integrity":"sha512-n6cBK5RoX6MkbeuQbdzJ3cR94LCquiXKJT5YK88dga0Khdkj/iWsludA4vOqGGRI7siG5D5w9ZSsyC2QPrRorA==","shasum":"918b77c1213252248fd6a3ae105bfa6a95ce43c2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.3.tgz","fileCount":10,"unpackedSize":1840814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3ef7CRA9TVsSAnZWagAAREEP/1zDtQQoRcdW9rDvcC8S\ncrTHz6EWz1MR7kd0NX5ke5dHiKS0svqs2TxEAgNC5WghrjXRPgq5Qt6I8Mx5\nPpBPUh2dUeER7aBTvUjSibSsAfhm1QgWME4z5ApIHg09dehAWn9KUVQh4uDh\nb/3R2SatwipfFuWnJuio8px30Cn32K5On4SDDId2G5DkX+aPPqPBpmi/X2zo\nXFtq8k72sJw1bwWn5F0cLyIPTCMRAymu3o4JELE74dj5mgXx8iRDmC93tOGq\n2OfdvwoIygX2vMcVgBn9D+JWYlo0iPRlSpa+26mQvkOT5+WJLAF5TO5MD7NV\nGjEf2M3sgr6guMos5DcQVG7ArykLpPfcgvs4y26K1wH8KHh3I1CJsxAlHf1D\nNlVIzWhVwKrRVqmnqpuKQ9IIRQGYhcA3j+mc3WBwTiglL4cfzXkfRgyVD2HJ\nYCtmFeBRNY/NjBHF6aS223uv4MT7XdYZsvyghe1jEEc7kDyTVbfLr2G3oIQe\nF33DYv647hmIQUXzoSt4DeCzfTC86zUWiuT0nEhmt9q31vUFFXiirquYV6OM\npkV4fUR3IKnscYqyeQUwEY4+0NXLjsCeTx4XyJgz72yQHbcNQ7pLOThUKwuH\n2/vLkz0VSw38zyEeJIbDRz1BSLaGlsFgigZ2/wJj/qKe2lzxoPtPwPIN0mWT\nIJZS\r\n=V+oH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGg2rFET8jpzGmK+FogRB/brpCOx7ojFhVHcfR/eAl0QIhALORCixkztZirhsuN2OXdUpD5v++cFsVnG7AstXgrr+1"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.3_1625155578657_0.265735348737147"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.6":{"name":"ipfs","version":"0.55.5-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.6+4155de5f","ipfs-core":"^0.8.1-rc.6+4155de5f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.6+4155de5f","ipfs-client":"^0.4.4-rc.6+4155de5f","ipfs-core-types":"^0.5.3-rc.6+4155de5f","ipfs-http-client":"^50.1.3-rc.6+4155de5f","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4155de5f78134a6cbbaa4551d1b35e8e44b580e8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.6","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-EU0sSUhNctEpCMiBDf0bZgFCPaXdAPaGkDKbjhpL13wfVZprhZizb2i04bwK0tMdbW7pdJpDbfn1rTOaS3PWQw==","shasum":"8d9c44f816da6c2886138c60e05f8c5ba55df17d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.6.tgz","fileCount":10,"unpackedSize":1798270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9ZrzCRA9TVsSAnZWagAAZUgP/0a6Ack7OEt/1d576IvT\ngUdAdV8OIRl/OiBScmzN7M3spTlQVerNmDb8R4alKSOZyIuECBQ4sQR6Curw\nWdlk/modhINkMeIv2pgL5mcwTRILaAL1GspTAyj1Zduq9iXpObT0OnGwRWgQ\n4XbOKxwULJH8+3/n+kAwBI5KQGTmMYSCbJ3eM4v1GUW4yjup/CQUNRBtRZRt\nRSc+3dS9Qh7SfetjavFjy/b60oFvfTUjrNIPkBF/7YM2/8HfT8BNmN9GccMH\nDgmMDCDgR6uxbMf88OvfUKvFpNj2L/QMaAWYEPQg0+GRIVX7baNp4VjyY+X/\nCE/YEPbVEF4HKne0eyvSWzltgR4aLwUHuQw6F50HTTVf6L0sEsqX+1APPMjf\nTinQsJb79ufEC3QIleoHfakUIvBqK6zvv/UIbOJu+G00cUWI7lcsOf6p9no0\nQuBBnd5+Dsd8utrYs28YMksuZxsoczS/eiGZIwhiWXg+t0Su781PXBxhKWST\nbYlGztzL6wfnoZ7bubs7sx7Swa9b6meeGZ//9NzayBORUgrpHP/OFinrTdE3\nsSy+GX+OJZPN+D2aO328C7p61JVEDmtjit3SOH3BkdRKNR5QOsAkzJsOR7X4\nVlkD688UtUA4vwELU1Wz65deIbn1sIjGwZI0S8tr36GfQF7PThxcGpiA6a1+\nBCss\r\n=+qYU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZ50GOhox3nkbLmpIKqV22w9NIQ706Dq5itDh3Ch+TmAiBTqf0ItqJmu0VyDUaC9583s8YPOWrPetTTeh8dUrOqFQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.6_1626708723060_0.9866303886710335"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.8":{"name":"ipfs","version":"0.55.5-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.8+50361a7c","ipfs-core":"^0.8.1-rc.8+50361a7c","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.8+50361a7c","ipfs-client":"^0.4.4-rc.8+50361a7c","ipfs-core-types":"^0.5.3-rc.8+50361a7c","ipfs-http-client":"^50.1.3-rc.8+50361a7c","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"50361a7c0ea69489bb24f6922319601e3fd919ff","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.8","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-VXSc9WGWnpCht3ZuxKezoMhYabJID9ZnEbQBlpQpFqmg3Na78cE4G9DMrm89UCzCWf2b6x3UmCHOkZS2Zx/+Ow==","shasum":"17023e3e1c93a1693b6bbbf96e98374495ff4a41","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.8.tgz","fileCount":10,"unpackedSize":1813091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/9IACRA9TVsSAnZWagAACYMP/2cq0SVtM2ZtqtrE9c/c\n/0rwv/l7cZLSSaWjAi2BPiRm5cSBx8qglAy5p9+zyhb1cP/iJm4lwWNzigh0\npW1ymC/1oyfVCKPZ09ZwmUJJKN8J2SVCWhLiNnJuZUjIU5g0rgaHuemnDG5f\nEF7SRd7knzHrWaFmHdEeKR+16ZyO3r2oN8Ttt7reuFeDB2Wq7NY5rWDy/aOZ\n3L6TNFOWnKlPwTQfq0+1DI0Mi49PC/U77PYyLs7ipKxKQYd0FnVvGdOf8t5i\n0jmm05evI2AM1pgXcgv9VLA2XNGbpE9BQqCy76vOKUOB5lB+0u2vRet1KOHX\nHYJAq9IX/5oZJL4HuEl6rbfEGlBw9LwRIquKCDo5ri/CZ2H0lRL8jZPx1Lfk\nWIZaMVYFcCcy/O4K5Xgg9mj5TP6Vbw3JqwQK+QMGxcaOfuKloCTbuMh9wfgf\nbemmz6Jn/E8E7EuMXzNgxIQW3ShZ8Gk2Et9bhB4+Gf5wj9ah9FL2Ikjmqaw0\nnbWMtV/fZwMILuIt2HAZAHu4PS0/PuYYYw4wOUOrKquT/ba9IcMEXmpSbFxs\nIvEBxnXWH+N4Nk4/3z9ipRTesggg98EBm2L5s+VaWip8QLWwA5JujP/AiuyJ\nOrxkgy1w+2txUQ1JNZnce1gRhKPvl9IKZeV25OY4Kms+jxqOU/V7Vuc9G2NB\nBTPh\r\n=ATVQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdht5mYyuKCxat96aFdn2BJ6uhZ5LtwAzzRCmESEeY0gIhAPyEoiUkq+Z9DtDlXZ4LAZDTQA3H9j0UmHt+Gjs6Qm6i"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.8_1627378176720_0.8546905643155434"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.9":{"name":"ipfs","version":"0.55.5-rc.9","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.9+09dd763d","ipfs-core":"^0.8.1-rc.9+09dd763d","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.9+09dd763d","ipfs-client":"^0.4.4-rc.9+09dd763d","ipfs-core-types":"^0.5.3-rc.9+09dd763d","ipfs-http-client":"^50.1.3-rc.9+09dd763d","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"09dd763dcedbdbc52c590150bf9788c3f17074e5","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.9","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-IJnEtWQdmMS0Hl69SG/PFxWoj0OELFvU3dxfSx/lyJg/bAhRv2B4ACxcmcUJmimAbaKY05cQKfPA6cdO8Wss7A==","shasum":"921252590ea0680d851a62738268a99b3ffb4676","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.9.tgz","fileCount":10,"unpackedSize":1813091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/9mJCRA9TVsSAnZWagAAPG8P/R3DzTgjoGLXjUOBD6EG\nhsiw2/gm+U31lO0Cw0wgdi+A19MCcFLB04rsSeWO0ZKnmgXA5iE9Jo4/WzGs\nzGhssYLKuu9/6binypBQyOwFFEi696hbyH8VW+0CNXZYpZpotwVoeOLr58tK\nrMqvCzKJ+7hq7teplrnr9jX9CB6MzkEK4UbgS2vOvhYlfjeX9mZT9t8Kocjl\nhIqmTZ1b+cNvOW+nIo3wYWfmYUW0S0bGpW7dVLNcR7vuPKhqSWPrqna9QiKe\nzwgu+jPAHh2BOzCUTGWM8KnfKO3sGQpkU4nUYpSvfQmpANdFf0wdqz7v9ReC\nb+D5uEZ18PTajsJItLiYUEneZk2T9/0SLY7AT/i8ZhH7iQXA0OA+XAd4UASC\nDCOub365/z1M8GFafbkCvdseeyiLB/LFkd9PQgckdwERR9+JLD4UJt1zQllU\nVC4YzqWkR7oeAyXYlrDxT6HFV4SjL2OklWlESQiTH1sTePv4LI4IsJCFCiYP\n303eWbec6q9vAjASDOa/StNs0oodms/7AVuaEP1luIJ34AAV+34wxygXgdZy\n0WbJKka0w8xjYwhlTtbrYIAvpyBrrb155Dt2kJ3f/mhhkcygFUDgL6UNbOJV\n+o6e34st6xs67nL9WFiy49A2BClaEcvNGe8y7tiXOU81snbKGbj7MWhS/0ni\nU3us\r\n=9k9H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl75x1qwQ9tNM1MIgBAIKk3KA0/LYOSvueFVUk2iSezwIgVaIBdDDKQ8n1ITD3UJWvfPpbOieDYV7XwR+sgyRrjNQ="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.9_1627380105411_0.7407455633333699"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.11":{"name":"ipfs","version":"0.55.5-rc.11","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.11+32f3424f","ipfs-core":"^0.8.1-rc.11+32f3424f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.11+32f3424f","ipfs-client":"^0.4.4-rc.11+32f3424f","ipfs-core-types":"^0.5.3-rc.11+32f3424f","ipfs-http-client":"^50.1.3-rc.11+32f3424f","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"32f3424f86c9c7bc28155dbacb12edd97d9b84e5","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.11","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-i/7wnCXPDenmxhcPP/K4PmWcoqcPrP/DtMn5GFaSUOWc0kKpQ5zyo6wPdKTyIch66FqAfCesGbLP+yvJeKg35Q==","shasum":"7930a7b8c35dc635254f1578f9a835e249e301f9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.11.tgz","fileCount":10,"unpackedSize":1813188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/+JfCRA9TVsSAnZWagAA2h8QAIMMt1pKn6UC1/Gqc/3A\ng8PyILUwlc+LP+Rv5DmjDxDiMokw252wNccKrXxRJFpDDHKxNhcsHzCt+Fps\nOKMuu25LpjWZ8dMzJlPAfpn7GY9pe8NuT++pE9DtMriw0fSNy6rUvmQRMxb9\nulHdId8RqrFmQSyzWPmZ37FGaxfGslxYvlC8o9qJC7kucnIVD0Jc4jXtrjMf\nofrycIXiuePZpNKd0Ad83bYlNuNK3bYtztFg75RcmQfX6pGeYFizWZQYLMZ1\n2lgKT/eJGKfmGuwZazLEY8Y68EHT5ihwud/8HpqnMitmaid3ZN2eT1YqZ9AW\n7cGdmCwlnxj5L78u6ZY7i0vgrtTKRD1x6yGD3Ni4BKw6f5N9bx3G4BR8Mp7v\n/QlMZCn52klhmDXw7qpc/oxXyc1Jp6J7cA7JGdX9svhKY4XyIJP7LI4sgTA0\n8bG/2ME2YR/77Gs0nNWfigqL/n9zImjFlJPZefpbpK1HpLZ/gzjlKG33xXVd\n8wAIIb70rx6EgaiIVOeZr4c6Jt/IbGnsdzKHDRH9VPvsjK0jhMTJXhDI1HYi\nWB7CW0somnq7ySfKkGP7EtRNlkDqHYQMp2JKO8uZz8fzrMcqni2DJpK3zQKU\n4+dotd+qYchK5xJk+DHw+mZn4L0H51I5SI2tt/ILMJ+6gFP05XAQx3tN4Ql3\nGxWh\r\n=jcl8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCm8tWIHPvgeKLlD7npSKXZZ5xTRm/E4zb5JHzLMT30ogIfd+TK3QTMiCdR6rIa6CmcDimEcQfHlq4Af65R8+2+2A=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.11_1627382366816_0.6205051394098784"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.14":{"name":"ipfs","version":"0.55.5-rc.14","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.14+71bb03c0","ipfs-core":"^0.8.1-rc.14+71bb03c0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.14+71bb03c0","ipfs-client":"^0.4.4-rc.14+71bb03c0","ipfs-core-types":"^0.5.3-rc.14+71bb03c0","ipfs-http-client":"^50.1.3-rc.14+71bb03c0","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"71bb03c0a3d5e64a1ba617341cd706c83a7346fd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.14","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-KST2mVpcWanxAStW1NRAAKPRZnUi18CD7i9H91+6gv0scNXXnLDiQsVP8YrKUun2fyXAVVLhWy54IAc/23Vgtg==","shasum":"90d06b723f005329d84330166ea45ae441ba1432","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.14.tgz","fileCount":10,"unpackedSize":1813188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg//oXCRA9TVsSAnZWagAAV+MP/imjap0Wlh8gnYMPnASl\npfcTozlJQcnZIMjtjD4sW82jeRcBMjudtcvUI5vTAnkONQDDb9JY9Gd7kb+/\nf6ldVo0Kujwi7rprvejwalJrHQlJt4FAjp8YH4cp6+cP1IcqajmB6BE1bfoy\nxwhX0ymYGLwJZ5g22WWl3KCrAv58Tivbkjgfsx5d/1SfufsKC3FgIU9WQ+53\nMBGg+BOcxaA9+Ss2Sx13oX5mxLelBRH/JCPXeAWNLN2ssUV19ihne05IT+C1\neCWuLJdb9+5lM2tGv1YjEp+wAOK8DAmJBZcHtkV9bhLUbpHL3oNJVLtmwExB\nsmxGBinw13eNcN8koy1R3j8MDfl7117BC/eCMXOENEH1Vl+FzcSahlpyqcYv\noogY3jpiXPWDRWZXO6OAslYL4kAEQaZFxucj0ZAi+Xk33zMTO9UwvzByHRxZ\n0hSIwD1MfgnIfdZ/ib37Mmalz9BrGuCmVlpzQqBxx1NfSmHEpP/f3PcgiMVj\nkRNjIGjLMV3+J3DovxzlDtQzX802mwtnyQrpw71VFg/FVZTHXZ8gAbEufYnC\nMU1SCFXUt9T9tqW1/N9TtAtfw/nXZ5RE7w4CuGpGCPP5Xe/SQa6q7OjG+iUg\nXarHDC2+79al+XfwJKPCRB52zCYPupMRYOPOyQQGXruuoTCUGaQ+VsAbn1AY\npA4d\r\n=4zYb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3uXZ4D7vovCwOykbNzcCiFvo14EbeePEorW0YAby7yAiAgPzELW89yYnZtoTNiukVRf19Qj8HNa5AxBOUM3LinsA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.14_1627388439021_0.7679509870290979"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.55.5-rc.17":{"name":"ipfs","version":"0.55.5-rc.17","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.6.3-rc.17+3aa4afb3","ipfs-core":"^0.8.1-rc.17+3aa4afb3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.147.1-rc.17+3aa4afb3","ipfs-client":"^0.4.4-rc.17+3aa4afb3","ipfs-core-types":"^0.5.3-rc.17+3aa4afb3","ipfs-http-client":"^50.1.3-rc.17+3aa4afb3","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3aa4afb30b2dc88a8b3cc2442336fd2583e2b867","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.55.5-rc.17","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-+As5pFlY5t+SUARV7PSv1VFMMm5B7zWnHLen3EDf/H8PEPWV2+UlcIyDsCTmpzYPGpH4+YuFVBgYc5CsorAoxg==","shasum":"adb799d6e2d4985a05805013ec2b1f9c8af4fc20","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.55.5-rc.17.tgz","fileCount":10,"unpackedSize":1813188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhABcPCRA9TVsSAnZWagAAriwP/2MFQG2f7+6x/+4cn/4y\nBg4MBiUhIA59Xnx+wNyZ9ZtExEo+Ap5pdZeiIuzD7+iGJVZ31LB5XJGeX9FU\nQMnnPGcJvOfVptdPW5WQdxPWRTsx56kyKatDwwAopxCnNrWbZnt07+M24dyd\nQIOTqfSEp1eSroidEWd5DqITZYzDLQBtNNx4oGUMERiGDXa4XuBRbf/uZnn2\nJqMqRbhuzfIe+YnbttjYtNMjG24vjg7v8fDlzuNboLnbVuqhV2/mttvOy4dv\nsVJexV3zrVhQuEkVnYBvP5DD3aYpuRZl0cCH7SVmmJfpIKh9gJv5b2WdIFRw\nLl20h6WukDDRy5ahojtiwFG14iKk5bhY2oOqRhsOiZ+xb71Jez5AiaGOGOrp\nLZO5nAlnfeGFFoCYC6LLLaHOQDOT0Ub0SerY8coSvzJoEWSRZTWcZrl1k3f+\nH7f5TpSNdny7xl1GHyzJg6kVSn151eejo904s4Ts7qB5Ag+rCcxZxQ+wBUF+\nfAxSs3Ncqfr1BZmCRQ4i6qDFCcnKH7VbMocP0bLtffL45w3d85mThKYEL+nI\ndKZcjyU9gdhKGleDb8RVtzmna0D9xo4N8h+Li7IBr8I1LnP94kcY3RE1LmLy\n2i1K+/KnE+6hvKWDD0Gjv5/r8dDSIGy0b9FkJnTG+TH9mYX5aj1HtV2OfQ1s\nhIS4\r\n=cfgD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4Fz3JgjYAh44QBgbgt6RE8YN1+dEHWXyIErGa1BehGQIhAI4cCwbp3GV2sfobVlBf/3IYFBgi5uB66ghfvianFbC2"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.55.5-rc.17_1627395855307_0.6573644147482418"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.0":{"name":"ipfs","version":"0.56.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.0","ipfs-core":"^0.9.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.0","ipfs-client":"^0.5.0","ipfs-core-types":"^0.6.0","ipfs-http-client":"^51.0.0","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"ef41f924e415fc2acd30032e2b484bc32f042790","_id":"ipfs@0.56.0","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-GpK0rv2crrdeoN4chBM0PFDMEso7B4qp0asR19OD7lTuOZXLmV6p5dpdlRxmTVnfNAvfaYZX6c9uWn22rAydJA==","shasum":"5abdd3fe70e31ab71d693f36547dafa53869b5c9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.0.tgz","fileCount":10,"unpackedSize":1812726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhACGDCRA9TVsSAnZWagAAGdkP/1hjK6xbeaY9w1AM4lFf\nAiVc36H3EbrByyXOegaTXh3CQfosJj6gf967E2DlHg1o9u7gNV9bdElB5E9+\nAyYIkRam3nvHVXQUZ16Zk+8nXp+zjFRrF7TORY2cCTchSWR6DlyDvPtKBUmj\nwnsaci4rcuRCbDBHWgbX69PtWevA5N0eV54t8Lh7i1YPiHw6ujnyMmg0ke5G\nJ0KcMOx1FtoodQI+uZ7cpysApM0rxTgaj1WcHD7RGmRRoqYrL5BFrR+aL/Yj\n/U16FsoU4FsPKmk7Dpfd72cilB7wJrUHX3LqX9/zHmhI++PEQXnGkG0fz6Cj\nGczWCaZfXKnAW4NCETw1yUi9SN9lHq8MauH7NznWLlYIQCtqVrXc2MoN/+i5\n9izLl5atxLsBYwy0ubpGStlcnJoqGd/dX0XITKcbWL/bQjh8D6GosqOj+8df\ne9KNlLkEp7gr5QWdzbycBYhLN3tqGpazumRnzrb6oV76/3x+EuquZWV2dPjs\n0neTPxVwqAkapMZlA0FdW+hr9CPjGOFINFYciEOLRfxU91QygME/4VDGsrNJ\nD6ypHvRGbgVjGXndevMmQ24q62CR5DSdmKnC2kSIvE/ytle/ni5FzDIluLz7\naYiaLCW9raQEKSqUE3j+6EUhs26Z0MahacMEyh6uy6IqkIdlvJRAYhMAy19P\n2yYr\r\n=JdK6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2DHiSYMFlEBT1b7WFYCjc3ZwhNxgCy0Ue3OLWlusFpAiA5ZlzpzRTqm305gGd9lnPFv6dwwIPtpaf7/X20gjCq0g=="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.0_1627398531350_0.9953929834981754"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.1-rc.1":{"name":"ipfs","version":"0.56.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.1-rc.1+5c43562d","ipfs-core":"^0.9.1-rc.1+5c43562d","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.1+5c43562d","ipfs-client":"^0.5.1-rc.1+5c43562d","ipfs-core-types":"^0.6.1-rc.1+5c43562d","ipfs-http-client":"^51.0.1-rc.1+5c43562d","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5c43562dd3ba2d2325e297e0a42ef441f9fd2615","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.1-rc.1","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-m4fV5uRtc3q66bfgkODNMxoiaxf50i9v2bI8qCg4ut8oU7cMxKeZBJZ9yeKGjge07nCsx9UnTnxmqX+mKXldgg==","shasum":"81b90fb43e764656fe4c4830278fa766aab56ef3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.1-rc.1.tgz","fileCount":10,"unpackedSize":1813663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAT/hCRA9TVsSAnZWagAAmmgP/0QxSX8wjDDu4tYAuWZ9\nw0YskVyUP427ghevRTyGN8D0UZ1u/Wr+BOv8oXsHQXpaXOo6DLPP2/d1W/JC\nP69XSNuuSIXeMeLwMLEhB8hwqkqGWndO+6d97q24DBMckoiJ9YtzsmVMfjLp\nkwyLkt3rf3tv4/wh7PtDKquu+bIm2iZbAAF/Lx68bf3EvDBv47aje7rvSRWE\nDvo9qzE+XAsZC1b2J3AOyc4YOBRKjnW9wpsoNcKo3+ig6wkK7LutRyWMtpJ/\nOPkfbQu7W89qiSpi8BOV84qv4tj2fSks46MECqRLjqkl+4lHf1POxDY+BFVX\nYE+senXX9KJE/PXN4At4l8eQwF4RDTT071Nio8u/yX3LyURtOJ536SgxoFmW\nSySBlqXZC3tmlffjVAKznOZ7YWgif6Vfs+xH7qAa/Rafqq/V9vqcUb/gJkWt\nCNjGOcCOw2MGN4HvqZDDFsrVfU15QYtlYrLzP8l9MMtoijufInf+ostrIaWM\n1ErvKO3cZk8bOCs4PslhiYBw8G//fLWZDQKoEqCqtTzTffMB5aopY4v4jv+Q\nJGQ4kCxQvEzPAlDJuaZlvkfax23IGCqQFxcISz6oPKWNkc8awPGOxeXk5oV7\nC1rOstbsdtAqkMbs44kNyxfeuQmdt9ekGZdQcjtZ32xHT5tVgNk7xxgALwCL\nQ2t4\r\n=jJRc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFx8vZ23zqiMG+zRWp4hyLAMMClZIyjaN3T5Ifuy44jAAiEA0XkTodNVe+vodaBNGM9RFau/Biz8lagHKAY1n8GIOkk="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.1-rc.1_1627471840858_0.5048216761731237"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.1-rc.2":{"name":"ipfs","version":"0.56.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.1-rc.2+fa015c9b","ipfs-core":"^0.9.1-rc.2+fa015c9b","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.2+fa015c9b","ipfs-client":"^0.5.1-rc.2+fa015c9b","ipfs-core-types":"^0.6.1-rc.2+fa015c9b","ipfs-http-client":"^51.0.1-rc.2+fa015c9b","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fa015c9b2291c375a5ecd86337831eb1071932e8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.1-rc.2","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-tOMXCWsiZqMjmcBDs5IHdEIGUhVVO6n8dAz2Ik8w7fpqRlqk8w6ZiXV9PAgu6zrHeN2exW8CbO1m6u58vx9uPA==","shasum":"3f75eb0723a407c9cd6402eabb9397209a7204db","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.1-rc.2.tgz","fileCount":10,"unpackedSize":1813663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAUzZCRA9TVsSAnZWagAA294P/RgCbn7HxH8B5xGXox5J\nA6IgvBGutE1OU+7AzdgEmoUPf5oDKW42LvssQ2BDycMp3/kQd0dWfKhD5H7k\nimxPjIt2abl/vyXD/DS61n9pTDvhvZisutYZiWoqhN55jTVMO2LJ05vuEWDi\nquD9ALje29PQMpRWS6fFRLcFNQVkse5ZcnYWa++MloKi239nQvd4RNqdSt3X\nxi2y+0Q7DQRUzuGZZtUXY31Qfmgs7JrWJMrx9jPtdfRFzWksfLU06E9lgs1U\n7H8EOSm8D3dnd1f3T26LBzeqVolk6k52tm8dRTbPojvQ/2ihE2RlMDvdWuWs\nurrGEc4UPFGZ9Ja3Rbb3ScpnPKG28iWX3j3tPJSlk3B5yiukVdi8CrBqB5ZV\n0zM2sKtv88l5OePNNZCjcTBITdzytO5eeo/n02wkGxMpIlhiM9TzK9ef9aax\nYkBlyDB5NvcaEOUD64eaVgXJ59dgK0C7oM89ep1SMOdcrAn6DqqbasceTC5B\nYS2nFse7SBSsHUei9vwnsrEIxTthYjiuZ8Aa15i2CWGnfmejRA6l/TcsJ5Q1\nnmdQdIt6rNs7YJF3FWeKsT8VthvtrPgkrnVYnev38XBR143z3DxEHJhc3EW1\nOYCjXOo3o2GXPUeVxDoO/xoYVsCO1y32rCua1Nh1/pkSH9NkIHRzo7QiJPZr\n8qUB\r\n=GYq2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkSvfBr82TITpnXvwSi2tatbusAAQm3Tp3kRV28imquAIhAMNc1QFu78PbOFVGoijt7I9ixww55jHToX5EXkSB6I0V"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.1-rc.2_1627475161632_0.19140439783325602"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.1-rc.5":{"name":"ipfs","version":"0.56.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.1-rc.5+43db72b8","ipfs-core":"^0.9.1-rc.5+43db72b8","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.5+43db72b8","ipfs-client":"^0.5.1-rc.5+43db72b8","ipfs-core-types":"^0.6.1-rc.5+43db72b8","ipfs-http-client":"^51.0.1-rc.5+43db72b8","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"43db72b87f0153ae4e9c46aada750fbb85d0bac9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.1-rc.5","_nodeVersion":"14.17.3","_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","dist":{"integrity":"sha512-SH2bu2tmVOB1uM0o8jN9/FbOXpmMbEfZStPpI9VIdu2dskLF6ARdJ8Q9MpXQ8twWTV/maTec+73k51uJnFUBJg==","shasum":"b469acdf952319ba129aba1f24a181c67e38b120","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.1-rc.5.tgz","fileCount":10,"unpackedSize":1813663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAYxoCRA9TVsSAnZWagAAAVkP/jvmnSavBDleXRicsYBZ\n3ItkiWCwEYDCCcdeGJmrQ14bR8qZI7zBeftnW90f3sytdHWbPdxBeJ/b77p4\nDGv/KwYl0TUNhfhkZOhugMg3mXaex5LmMqrv7EBB6e9i03CDsueQjoTMz6sg\nC+AtiwR0EjPMIIpM/Tbegj/hhNFTtmC3CJXAdwH5VMUNBGBaAl/duePvDzMC\n4svexnvwMew21Dn2v1DEZ8gxuly9gklEcQblVRk6cseNnx7DvUdIh89p1Bv9\neeuzlBBjMJ07Z40hHzFOuN73KADbUxTacpmkKgBTuB52jHYEasYDI7nva3Jz\nxIbpx6bEYmTRwU8D9XBq2WfRVYD72yBJ3cMjPhtIajiqDxGlM1OewX759Cih\njeaxhFr5wye0FfCPKJbGfH0+CL86N9Mg0bGFxMLba4Qn8WNOyXfCsVUSy/9j\nr8c1Lb78h6eBwBJdQrQh+wiDhT4BAWaP1zp9BOchQbuSQc04nekUirMR/B6G\nJXsDuEdnvghklhocka04zaSvdx1KB4ZcNHtyNsLdx7MNIB3wJT+sZH56JtT0\nIUGyvqpibZhhtEEL++1dNl0QoqlIPwp3Uem4c+RmMsOx0dUG5cmj5QO2KL7e\nEd/4jJyjA1XyI4z0XQVNQaywxg06o8wBnmDI2WgxV/Q6ngUH8l8M/shBX5hU\nh/Sz\r\n=CeXA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgWof33OIqTogNot7da2KlHEzJbxhePvr2/NE7pLpUIAiAN+PjPTZ5yHYzGABZQvUWJ7d/Y7d6jsyuEyNoxMGrUFg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.1-rc.5_1627491432202_0.17051394038287615"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.1":{"name":"ipfs","version":"0.56.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.1","ipfs-core":"^0.9.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.0","ipfs-client":"^0.5.1","ipfs-core-types":"^0.6.1","ipfs-http-client":"^51.0.1","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"dde3d28b4a0d0f74d73c0c0b38eda2e01874a2ed","_id":"ipfs@0.56.1","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-BV+675/Z1QgmYc0a7m+N/kK5P99edmGUXP8OdE/eVetB11ZWQRl4opyLvcyFNVKV2ja9q5d6dvUJW3sPyAn8mw==","shasum":"bed42e14ee4ec9a704c41d9f4568aba129e91966","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.1.tgz","fileCount":10,"unpackedSize":1813669,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBDJCCRA9TVsSAnZWagAAuhcQAJpsHDoVSNTBK3evpCgP\nhQhyhGJdlTu8frOGmKYMWsuMdUjs8RGwTwVo00DANtXy0ejqBwWF1CaHQTlI\n337Hl+VTpECVEGox8lZI+hB0bkJcSZQGA+YepmlIJZ1rGR3hQTd57UpwjE8+\nA2aOZnAplkLXWXbDy+SM9efuaq7U2WZZM6S8V3Gwu4pVzBEORL31qXF47vs9\ngFcI3fYGQhudXpnbzb5mAPX5vqjoSvlQ6x3OdElEHwx2iQsOz4KK3Zhmb0Aq\npno+x2/fDDJ6eA/iK4chwBS053uEV9Kk7YaSdv8i1V78ceBs/uvSVnehSN64\nahyXQRDvnpxnzzwhF/Q+r83M/iwDb09BXjObVpx75orJeUE4y8YPo2uJh96W\nUw6A/alG1brVZwBne4gHqy6Tao16Ez0wzQytYEmoHe6Ug4UiZnexNg2Q72pF\n0MpXnf3Lqo60XxX6YKB9DoEgGv24UY9xgw/8AV5ZLL8FC4CUzOMMXl17OTZT\nn0Rj9RD/RShxvFyeCgAohjZOvamuTC1cibCsVcH7Q4CBUne5Wnv8EHVeQ7uj\nlv/c1WO4wyV11JKjQNIDhCeWR2k6Co52GutWn14zg+y5FPZRqb/K9B2sjxGK\ns1a0bMWio4qQKgtmzCNUQGyIoeYrmwsNSmIl0nhOM0BlZuFZhqkTs5fsORcF\n+1df\r\n=mvp4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiO1sPuP5gTHQMW2IUJqqqX7X/9LpPqUAeFvK9wHGGtgIgQnPZ9EH+ylLuuo9UsX5N2QwSOWNOfsLHAUR7eZy/vsg="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.1_1627664962074_0.5224261850961007"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.1-rc.7":{"name":"ipfs","version":"0.56.1-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.1-rc.7+fa78b4fe","ipfs-core":"^0.9.1-rc.7+fa78b4fe","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.7+fa78b4fe","ipfs-client":"^0.5.1-rc.7+fa78b4fe","ipfs-core-types":"^0.6.1-rc.7+fa78b4fe","ipfs-http-client":"^51.0.1-rc.7+fa78b4fe","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fa78b4fe1386a151422bbccf33818f3b15fa36de","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.1-rc.7","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-dJ3cfqS7nHjVF1JnuxQLBtDSAljB2OgVgq5RvxNntu12+XQTMFwbyfUosqLkXZqLdJkEXp6LN7Lc1ED4NMHKoQ==","shasum":"81162cfd2a89d8503232db0e204d4dfc2a2b03ee","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.1-rc.7.tgz","fileCount":10,"unpackedSize":1813678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBDdpCRA9TVsSAnZWagAAQvIP/R/xixYYMD2Au/YCP8k0\n2Ur4c9QwKeU3IgSqHfqKRHV/N+hCd6bBWmvD5aLs6LJ42rQOnJU7RGujAzg0\nv5EtE20Bp0C+nZiCp0KjgETJ4dmsZzuIMtNPYbxITSZJkUytDf9p78NNgaEG\nYU2wnXzhJ5Pfphw1BoQmaV0kgrza2I12D2RnPBZ0H1cwzhsG0/STG5+KEj34\ntYv5pd0os9Sr1/ZC7wukv5lhcFosVCVw4TEkXsswocLRPdBnXvgpmfEmrVPh\nhd2y7Ja5f56QGV7bn4gfywonV90ueDE43hokTgjKlI96YRmSlg5Dzw2jeQvY\nI/f4wQfbWLYSvLQVgUxti4Qo2qQwWVKbC8E8aAoxvFWhUOtMrp+0+B0uxbz/\nhK7ZK+l1NvPQy9W7LHWSRKgdVYkGjD/nkSv5nD67OCVLyeMRUBiekthpe9o4\no34bj5No27s6duIOaVhZEPPmEtayBxBf647g5i19OeHou+pdkK++NG1an6bT\nvCZu2wb1M5rjrIXbJ9REL6bEMRPD2rjB4pEMHenZllTdUqq4EFd8nXrGCaZD\npl58McFq6lt5PK492hd+CtVVH9UhXqzeF60VvUiu/kQlf0GgRD7gMsJ11DXU\nb31VbkwbpeLvrjC+TpVQP0cUlMQt7Wwvjf4SoZJydxoFyhvGtRfjuuejRR16\nWp5M\r\n=TCEI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5QqmDnBZ6Ouuy7iGgiVopXtNhqDWIeXbyP5pkGXwTVAiEAx5xFSOiRNQqjVbcpXBk9Yup2uw7eCHHsabajk5iiPrI="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.1-rc.7_1627666281502_0.21264983622763745"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.1":{"name":"ipfs","version":"0.56.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.1+48f655ad","ipfs-core":"^0.9.2-rc.1+48f655ad","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.10+48f655ad","ipfs-client":"^0.5.2-rc.1+48f655ad","ipfs-core-types":"^0.6.2-rc.1+48f655ad","ipfs-http-client":"^51.0.2-rc.1+48f655ad","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"48f655ad4a2ec96f84c4f73082919a753523408b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.1","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-1q4Bupw+5x9yU7GQcBbQkNqbilwAz8qH2UET5ZCT/o88oBt0wv3y9OnVVwQLEpZQqfHY6O4uIgVKMZ/qOl/qvg==","shasum":"e4fdb873bf9a905d87011783c68f7a8707fd6187","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.1.tgz","fileCount":10,"unpackedSize":1813822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBEuoCRA9TVsSAnZWagAABeEP/2HKvvpJspO0tC5H7bgX\nwaGCU+KFLY+8ScOOGzsb801Slh/7diXmx0Rpm8OOShvBnRpzG0pDDzpXxlve\nTsfIivnbAXVK5T2OtUBduzG6aiAU8gqQM1b3Woaq3+vd0V3mkFtqHoaZj0xS\nHtS/+9QgKJlkfH94FaE1Vt1Myf9FdFsQRryrFxrhtbxecVXwM2Wn7CRZsiwu\nTom3OGXcaDI8OzOW7DCkG4zTC5BeyE2UQmm6A74e4wfjGIIhLwL93+XU/Ech\n8qf0WbBLIXxFHzjLBY00+YDTTOyvGwkWdX7M9zcODHv/s1Q2VlM8IwISXJON\ntHzzRx0/WxKAWastrveVtRxJMHPZ+LVfb34Jd86w6YCNFbpEjLw0Wd93aE1q\nvXZ+iLm4lOAhvGsh9aKSz1p4iPi7NIPf8Ly5UNU9PKPIuHV0QOByFnRRK3Yt\n9GwvkGd66VwA3OlAEQpGFzSt+TCJSzRvqcLig1PYePTBgaS4vob9j1QNxanN\n/y+9FPz/HkiTS161Q+07CkQkmZBjdwYC6gAOVNTJc4YYGwAaMdUx4pqQ4MIk\niu10hjWnuGZH0zvh+noy0VyQ6jiyhWRCXmbkNAcyBOlREPcSn0JgeaWPNcbW\n1Qfner70+d0fUH+3Ta6lxDxPg9AMpMZ4eMuOaYE6xo3JWOPLztyGM55I+IqT\n8fFu\r\n=X8jK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdsyb7PggFH6Egc5wPafZVuGR89UboYB9++6/n+eF8PgIhAKnbkTo+F6Hmq+SJeul0QJA/RVMJu+2CTaxWUsb7Lj+H"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.1_1627671464151_0.2550935307691953"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.2":{"name":"ipfs","version":"0.56.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.2+1db6b88a","ipfs-core":"^0.9.2-rc.2+1db6b88a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.11+1db6b88a","ipfs-client":"^0.5.2-rc.2+1db6b88a","ipfs-core-types":"^0.6.2-rc.2+1db6b88a","ipfs-http-client":"^51.0.2-rc.2+1db6b88a","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1db6b88afc5647d3a187e0ca4199d8ab2082c629","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.2","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-q3yTF1+nUHmPshantbPg+PEjaxUTO2zSnGXln3r6Qsk1j27gzhwSmzdkjOG6RpSo/fgqF5DkOtwDAGoc/0ntyg==","shasum":"ed99e1314861ff41b7b45fc009d67a76eacbc64d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.2.tgz","fileCount":10,"unpackedSize":1813822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhCpvLCRA9TVsSAnZWagAAs4AP/09CVZp1BgC6WdmGMvmX\nCyF/bKOiYLI5ix7XsysU2MSSgbbPmi5deshGkw/5U7vuj6pPAYUkVtgy5RXi\nTjL8QkmvZZT4rjrcjFXCJ0oZ3+khKcHYjYkpGHe00DOAkcsb/cG8BtY46DFI\nztmn/n70hGC1g6Z5kbl2b7gocgY7ZgGP2SWszCxcedCWqeuSVOr+FilctIpt\nIHK1w9hKuhFpgiXNOz41NOo/WTKdQmZWlRzd/zLnMSpN5jHHHP4fjxss9NNC\np10QkNGWLMvJIY7xtX0IOay25XwN8zbLHqEpaTo8+jOvI5ea7vq2M20ruBvG\nCFQQ2VpM5nwJOTgzZKeHCILJFUk3dBv8Zj6wPRGtz6ubu5dkBCoSMO+w1hBO\noXRtaaMK5DtbbtHxaWPBSvteucXNR1ggqfjuHE0DGnEgIeUx+fek/uBodVJb\n4CIAFHWooUlmyLa2YMo4M0dAy8nTyAykiQcDDaqdgF1JrsFpLAMKyNTLgAz9\nUwkg9IEkYCWUQ5o1JLnkeg4yGzzp0YWRHAK9Mg8erZMqWI0vTc5WytKQnCcx\noewg2VCAOMhBMRM1T4MWG3i+ZhtFXkLT7WI0MF2D/VvFQMha5Aa4v6ylvK54\nqU8A4M1oHSMuzCoYg6XXhdge1BG4Lxi4UAzk++VlZS5/gVezseaBLswJIzER\n1Jdh\r\n=IdXd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYNpLntOnoQ54ynkdtwTcGCRVhtfM7OW9cqzod1P5zoQIgJVcenv1u1pFTw8sUBYmLNiwksnw/l+Infds8kHny6uo="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.2_1628085195411_0.02945690557868419"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.3":{"name":"ipfs","version":"0.56.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.3+6adc3fa1","ipfs-core":"^0.9.2-rc.3+6adc3fa1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.12+6adc3fa1","ipfs-client":"^0.5.2-rc.3+6adc3fa1","ipfs-core-types":"^0.6.2-rc.3+6adc3fa1","ipfs-http-client":"^51.0.2-rc.3+6adc3fa1","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6adc3fa18f1dedea22babce41d24d7435e497ecc","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.3","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-0JX+/b6kIoGyPKMHWz5d+D1vx7yNyEUr83Y6RJ1BpOoGSkOrbmqlmCQWP1Sa1a+gqH3501+1Ha++B8y7mQ0H9g==","shasum":"0a2a7a36e3a97c50a26fca680987cf1f6b659a1f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.3.tgz","fileCount":10,"unpackedSize":1813822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhC9AaCRA9TVsSAnZWagAAzhsP/ikwuhQ5fc+qcjkigxUQ\nit5CUP/6aPVmfsM8ipdNHVhEoK1XQNYZqD5N10JjyAjZhTtNF7P9lc+CfFBH\nxLqRYM/NvBqGIRwHQRcNfJbgyfCo0vyD6eDAjPtMTYn2DisMEVkUVhw0CGVQ\nnk9fk6nnAnJdmMEuspYsaIGjwCkuo+t3g13Z1wvOWoPohrl7KH0j1wAhJ5Tn\nvT80G2/iD+CIx8KGWer180w31jt7SYDGNfrl7iql8uk/PxsDri/AHNxTZYwY\n2fJTPPZOjjaehAbHSCwZ9W9XhrAtCqfh4L7aykWhvZI4zeRUDBoMKgLGYRoc\ngu5Ery3mGOn7ZM0nQh9hwtDLmDHzX/5CUfubIDhT0pBGdvNha2lX2nPzSM4Y\nSYUj7L9ODwxHXbZRs5U8RXIbJdj15SFJmNlpT+jTX7q3cTuEFU7Ek1weTk7T\nGbjDsbPZwWoRF0CnV8D73HhtPEld4aVaFqmVV0Y/zgbPxJxRw0XlHQSM93WG\nOK68mwj883Dek/hBt3v+9FoAbPdTFuibu48GB6k562jvRrBDOE+EzHjmYz39\nAXLaZRLj7RSVnh1H1dlgXpQoQnwCKs/wptYrC0qO8mrLwGfDe9v1RKldTDec\nxD1iHv/DSYzJSiGdd/wYH6Tq46DMUZBBAdhdxElUSgnof+9fbhnIbMPT/Gs+\n94Ue\r\n=IZXO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBP3UV4ZKOt4ueEbHh2ozIlbzyc9m+H0libHeJ7diYDwAiEAo4Ehxh6XHW0dkTk4mRyEt0d9LuB/sPYjNo/k4ixnbJY="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.3_1628164122355_0.7290274513728774"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.6":{"name":"ipfs","version":"0.56.2-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.6+a6c68803","ipfs-core":"^0.9.2-rc.6+a6c68803","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.15+a6c68803","ipfs-client":"^0.5.2-rc.6+a6c68803","ipfs-core-types":"^0.6.2-rc.6+a6c68803","ipfs-http-client":"^51.0.2-rc.6+a6c68803","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"a6c68803ca19536c022c72554af2311962b2a063","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.6","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-xwMRjzQ8Q0QbSW20FlxkK1YvcdBq+K9p5z7Czqlp7ZBKVY3oFuUzecP53tDsIq4RmfjwoZqNziuw9gJaR92lwg==","shasum":"eb99176e3eb9c7f2f9d7729d54b4d273b9e4100a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.6.tgz","fileCount":10,"unpackedSize":1862554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEVi8CRA9TVsSAnZWagAAQHUQAI7qseuQADAgY0YuMd8c\nvF3KijEhRnYHnkADaRTcd7t+bnA0BJBR/A+wp3XE2cRu5BZyGiXugAW4WXE7\nsq2SZ8axnpmtDpaU46Cju7ZXPzlthWITbpunJPhxNNvoFZV5K5ERSqS24L3t\ni0CSAJyRqPHi8n3L9fq1E1pYw0Z1AXgbIBOqDnkluh9rNclCie2xs21gd/YJ\nmjiLGaixb6bsAiEXnGddBxwNSo0ODqdpADZW5FUHj3l3acQomHcF3z1H5vfC\nHPFIuw32uqvwWytfRRIgr3LbHkvO6aEyCyrq2a4oN5yKi+BGDYEEtbm0co9j\nPd/W3wJimTgvAWGjyhnYOVTr99Ibmzn6k5ol4DWtx1ddVq9Imygkx+p5VcDX\nyqBapL7vWX7lXwRrI0FXEg7+QjUUk30fCMujtbC7Ds6rSKEiH9b7etbqB6TV\nOxMQsprHKFTnhomwEjlcNBwa2O0qAiy+CQVoCpoWGF89l3FpnLvBxyPr6ChP\nl7jK8d4NKUSvQVd62GCZGnZzoICrMeKLC2NVpOEPa4gvf78QCbdN5fKzo+0O\nHXGNk3STqUEmSBqIFDYeY5ksts7YvHhxDEN/0NBuwYEXfGYG6M8pQfhiLwwT\nLdOI1Lvp4JYY0b9epf/296URdLLrU7GshMFU//xvxDMmlg38H/QrSnoti3I3\npLQD\r\n=NlxU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfVSWDGLQWdnkZXl2nkkiJqfbHiGQjJV5ek4+FjMtuPwIgU3mGwbH3juZIfT2Jj/8a2uZ5HosjFRFPLUD3nxP7nrQ="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.6_1628526779814_0.4822306153300373"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.8":{"name":"ipfs","version":"0.56.2-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.8+213f0b2d","ipfs-core":"^0.9.2-rc.8+213f0b2d","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.17+213f0b2d","ipfs-client":"^0.5.2-rc.8+213f0b2d","ipfs-core-types":"^0.6.2-rc.8+213f0b2d","ipfs-http-client":"^51.0.2-rc.8+213f0b2d","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"213f0b2df0e407dbb97ac2de9b82830da234fbb0","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.8","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-oNpJIfRZlUG/jCJHNRfF6zFdxNA8fGlwYpUnAnXARE1EsgQlDpeHfy4XS2j19zyKViUu0JAdGGLeBKlGB2cM5g==","shasum":"74686dc6cbdbf38ba34d0e92d19df7610bfc4bdf","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.8.tgz","fileCount":10,"unpackedSize":1862554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEiicCRA9TVsSAnZWagAAzg0P/RBmIHx8Wi9OEVDUl7pZ\nPjozhv5i/tKNaku95qDE/POuEtk296PsAOBwrTj3iGJknmTPA6aVzFmQXs9J\nfG7iSExk6chR0VafXdKNzjg4Eo7SXCdFYfGAgvn0axJZ7YiG84L0K9mqHvJh\nJq95QoR9GlWwJuF9nAS6SDMlVCUwFjyHCIc65ez+8IXfFLBvKfdjO/c9JBeY\naXNIDlMXouqgNOi5xWgt/4FthzN7pCQluVvIox6+ohOotG7NaVNsacWsBieK\nxS7yun1t8tYZsPL2ndYxhziYF1LmSQ4vRt+FfZXvwbL0h1/FfH8mTQ/Aj2V2\nkufNkKz5ViKesSa44azL1E2PZMdrsS13uy2tx70hPCEBnT/dA7DRVEsf7ZfH\n5R1WDseR8J5mHJbWYP2rvCZd6B5JnI5fRKiUohuFMI5VFrkdYLjtkx3j3LaD\n7LT7i1LUcbhiCwvp6YyDmBbiLOWK7Mg14ZFjtu2KEdFnyVPY7FJ6Y/r4/Uty\nOIWrrQ88oGUVn9U+KVoGmcL/hIbbz/jGWrTd4aBNhoD6uEHWeiUuVadb0f/F\nVQkd9JRdNZq6m80woCqxKx2hXkYSBDZxXrNlKAzTTVRhKzv6S4YSnKIcrffR\n2qnvxyOmH+jLwz1si9CVna9lBE4AWke7x+CuvbRVp5/fjHALx8hBL2yV2Pe5\nfIPM\r\n=v/xr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtyCSQpuhDr/CMEIHkAwBaa14p5NPHfOOwF8n0mEiH8QIhAJdYZzsWHl3mHEMcKROQTIgMxq3fxyrErXqpVISXwNSr"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.8_1628579996619_0.3603660868716365"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.10":{"name":"ipfs","version":"0.56.2-rc.10","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.10+4150d1e7","ipfs-core":"^0.9.2-rc.10+4150d1e7","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.1-rc.19+4150d1e7","ipfs-client":"^0.5.2-rc.10+4150d1e7","ipfs-core-types":"^0.6.2-rc.10+4150d1e7","ipfs-http-client":"^51.0.2-rc.10+4150d1e7","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4150d1e736c15863ae7e354fd1f7d6d4e34e4452","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.10","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-Mp6fi5y68pR8L7lKUMlKoeecVWe2OSEpFiEu0xjnw/cWfdXM2spsSZiHU1jybL5uVv0I1xuGzbfOjqN3nBAoEA==","shasum":"be17a558944913b93b2a19af193223932c17ab65","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.10.tgz","fileCount":10,"unpackedSize":1862611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEkJ8CRA9TVsSAnZWagAANQ8P/RYSMfTGzc5ooVn361Lj\ngz49TejilrpJxQfolw70qjN4Ven0ZBX6w4P2w73bWd6r6XNnJOUP6dwGds69\nYpnRPfYpHw7z0+2u+cfkmY1Ximg9mwCeCTgL9Zh9blH246lvQgGummxV5DVW\n1JpdrDFtTWbg4XzrZcMINIy82PMqdWtlg9CWhhlPz6FZtb4NtPpMItPl1L69\n1EbpoCFMPnkEMATK/REy7T2Fdi32bnwVUOmYMWvaVaEOSCI82pRZegw85Obh\ng0ve4NmE6+UX9i+ejyDui9UgUVs+54JZ6RohAFRKILh+C7/41hksNo/v+apS\nIjxKxo8gSjXNQ11nliZ0ZOx5AG9r6SDcSI3/IsmAHI+MN493WnlG62GU3M4i\nCkXFtOWaJ5G4umOcHispn/lA58cADR1IHd7uobogXygw5Ut4XBN0CFoGu63f\nWW8GF2zDIB/zQITy4fQqi1lW/H9C3xLbqlPqv3mNF1Bz5K09c76eadzdrveU\nbPBCDH+vjVKcr7GZLf1ZR4gnbgv00/6tf31o5qK/bf5v6GFppgWDm3Q4YmK7\nB+BmTCUK+q8z2M0cJRL2ou1kPJAvXEg0O1waxPcA3e/6wmnrz9WE0zLH4Qlg\nSOdAI7yHImiYKjmbiBSiQwu0S7+FdpswtvcUyFNOAIlSGCmO2It5QxHBJjDm\ncNmI\r\n=M9rD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEJpRje7rY0nW+3C6ZU0c1IO9SIApyPH+Ogu8bk53yUuAiEAs8VcIusYt6HUJKJ/RDRDg28At6UdeRoiqnkh3q/iB3Q="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.10_1628586620584_0.1827410133167522"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2-rc.11":{"name":"ipfs","version":"0.56.2-rc.11","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2-rc.11+fae59868","ipfs-core":"^0.9.2-rc.11+fae59868","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.148.1-rc.20+fae59868","ipfs-client":"^0.5.2-rc.11+fae59868","ipfs-core-types":"^0.6.2-rc.11+fae59868","ipfs-http-client":"^51.0.2-rc.11+fae59868","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fae598689a0b9a3bdcf80ac71c19b709294f2932","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.56.2-rc.11","_nodeVersion":"14.17.4","_npmVersion":"lerna/3.22.1/node@v14.17.4+x64 (linux)","dist":{"integrity":"sha512-ReJINHZgE+MH0flKqvCBbu/bv5/CuyWxg4aFKUb376JIXIe3UNWBImq0C3sRbfjKabUy2INA8ZLL1ZrcxEY4aQ==","shasum":"f1d30e1cc3a61ae8358d9c9c6695e624d26f8288","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2-rc.11.tgz","fileCount":10,"unpackedSize":1862611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhE5cRCRA9TVsSAnZWagAAs44P/0myBLf1zwXw7P8gWOcs\noqacAJfx0e8i+EIjYGiQ1Uo5zDzQVVyJnRqlRu8JyxKFEZObGYAbXZ5pjsGc\nJ5ILF1AOG8lNK4IUCuYsbVmOi2G6nglLML5aV434aZcO7XjNBNKgYI2imASk\nNDUfRnSEOzveYfxgm+30I77IM3V1y9YfKuJhPCLwWpBBxcsPlCjf8dXfsl1Z\nbLtPate2UFIiRg5ra8B0n9Adql4RyWnzUlRTlv264bYhXTzIm4/PmGt5C9SA\ncmgBx8+jJ0SIrPxv+YMZM2wDaN+XM0xGhVtQEHHq5ADIJUEU5gS0kfvUeGMc\noVkRQX05F2f+1dvzlMSheAexd9Xt5V5PtpBw6W32/YUoHMLRLJeuqQ2AJt/z\n54oc/fI9V0RT7DyZcys7dKq3AF3AfS11YIzWMQD0gcUicpF6Vlje9hG1S6Xo\nyMe7rG6+M27YCHwmD50yEwdDg1Wg0dVELIRSobG/Ly694VDOY7aZNuR/OIO7\no20wiK5VzR5/kFfYLLev+DvvmH9QN7FPRQOTVx6U7LYCemgGrrNWbakLXMb8\nRyonHj0zN5KE1XopHqcTJ7m4IUuBJZ5t8+kCVw8ZOyOnzjOc92iVXjXmYE5B\ndTy5Xa17cqR01lvbCEbGgoejaxGiSvHWS0e3Rfs8DNL7hKIqSVH9lXAnFwwT\nwmkO\r\n=Wnnk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL6Ldx03l6HzzadA7to/v1iosDzq/x4R2wGiuCJG1MdgIgeb2/QSyqD5lvdjBwSnCQ6gJ8ZYR9wUGELEpVdYe+Wfg="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2-rc.11_1628673809100_0.6921396688116532"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.0":{"name":"ipfs","version":"0.57.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.0","ipfs-core":"^0.10.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.0","ipfs-client":"^0.6.0","ipfs-core-types":"^0.7.0","ipfs-http-client":"^52.0.0","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7f241319856719f2d9f2c1fc4a6b1062ed1ad398","_id":"ipfs@0.57.0","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","dist":{"integrity":"sha512-e/8dY2uz9kv+ADlkA9dZ/HK79hANPycDoDjmewcsYmUg3DVIffInQmy3pSZMONqBxGGySd02KzCT/sL7MOz34w==","shasum":"e1a2495c167399ec01cc39e519cefbd8e15c5977","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.0.tgz","fileCount":10,"unpackedSize":1863218,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhE+jyCRA9TVsSAnZWagAAIE8P/iHs3/XvuCcE7Cnf0ZqB\noPkK44PrKs3lHY7wmN5pHFYSH/KB0ARXzn5XnWLp0TZ7RP0R2rZf0SqCAEaf\nBzhOBuYXsFNGhygNaNRVi/hsSf0MeEvMUGgA7o0rI1LZRz24M/WvfwaGkLqN\neMY6dzpEkqF9EEORSwcGvFaJIN+8nK1OZ9JORKZanuUqOJmN2XvUDFS4yIrx\nU7NFWU+2Fkk6UbCvHovEfnLHMG/Q0ji/8M4QBtvkw/ZRPJ5WMKAIIBCqja5I\nx5GcMkQ/33ePNnHRWfSuifwKcHjDpO4UeyjDJCz3ogdY5apbHfhNz/8RGeLC\n5ZLjF8a5tD8pC7/D3ICdqzkLbgXzc7QzwG3vMZ4s1YbkL+i6yvh7lSIAjteg\nmdEGl57tH0PUvsAR7zp6SmMQ1Tmn4/Fq8gfigthriYSYkg6qCbUUc1f9FRFP\ngh/JIGyVGCxRq0n1VSnqIPIu1C3DDszSzAQ7iHkYPTd4mVNKyCxxSXKkbg3y\n9GAy5CZkkCzK779K6F8nIjH00jfsbFNzmtW1XawUV39tlHxyCQHgzP6H6bHm\nEd8Uqo0WsTo4Byi7wdG3xMaxom2xZbeclrOfxsidmQ002yQpQfh1wEx0U6yr\nhHEfOctyKfDHY1ZQRuNoM2gabK9QJLQoyAgw9MrwIs9UiVRyMLLO5ck7va8w\ndCPQ\r\n=z3U0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJhmPDxjn0Ri+t8VTMZmGk+fUSkWMJLeYiPZ+8LRrnVgIhAIqKwXE7obdhxBo2iilnvCPbARCZhjNCTAUtnz7qcsBq"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.0_1628694770058_0.5161128912392221"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1-rc.4":{"name":"ipfs","version":"0.57.1-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1-rc.4+b7735674","ipfs-core":"^0.10.1-rc.4+b7735674","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.1-rc.4+b7735674","ipfs-client":"^0.6.1-rc.4+b7735674","ipfs-core-types":"^0.7.1-rc.4+b7735674","ipfs-http-client":"^52.0.1-rc.4+b7735674","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b77356741ac597f57e0b9ed57cddcf0ce3fe7806","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.57.1-rc.4","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-FA1hX4mfQwqw8iaV7VcnqdmL8w2Un83Dh2+qQQwSkQW76e4+Y44B6yJOnCquXe2c2aDJfhxqQlSJTpybP+golA==","shasum":"852618a1d21614462adca8bd24634f5ae2573f5d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1-rc.4.tgz","fileCount":10,"unpackedSize":1863122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFP03CRA9TVsSAnZWagAAEBYP/jLvTk5BnLF2tUznbEag\ntS/2uxievongqd+UTFUffM640FzmDtLlMowLOwu0aM3gryVvQuKQzZxHuAVX\n3/mUfXBTPqR/gr5ZQOt/OSwMd4DerEw89HDerh93tF/WpZ6y+Jxu19ESU/eS\nE3OQsBANG4WwATo/hIM8Yxww4dllhoD3naikG6/3kcOfTdurRhapEy1chqYK\nfaU7U1Qwn+L8PTaG1Ubeghj68GLhvfrrzDNkyP2WtsvPkZ0NKciAkLSsFNJg\nQy4xSCojjwhcTps6SXEeM4cPP1Hv5mwa3ThmPXClGi9TxJMPJUwiv1OmWynz\naLxztf9VoXWKFsIIaQMm39BE2tCH6ijVgvy+JATyzUzOXWa4Kh2qoNX05rbi\nW3wqYedb8efHd6Mj+slC5tC2QNLAhnYbJTF6wm11Rv2u1phqylBDfjoPVvSF\nD5YbvxLeg+YogpmKu0tg8G595y1nTznLOaBR6fU1Q/zxkOx+KIHvr5Jm7efK\n0WCXtZRj2HrI/xyBMJ0J33g4zujQXJEOIPfVrDlqSINVdO099e0ZHGJx9Tb4\nMZ4OanQ5KZ5ErWyuzBOIoYasTvR0YY0T6yzhHEqisVIu8WMqRBXEo8q+LPfX\nE3DS8TqvBgN4HZsMXSCsojvTdEIb+ebvJHQfs+oDUp6uQSBNUzVfcj+baD2z\nH8Lt\r\n=pW/G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDE1UgzS/w+NBuHb64cHTWHLPR+c0NiNVxN41R9ZBB0gIhAPUt1Bkay65YREc1T2v8TKg9zG23kNy3EBTup4duZjXr"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1-rc.4_1628765495208_0.1971530235706569"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1-rc.5":{"name":"ipfs","version":"0.57.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1-rc.5+55dfd937","ipfs-core":"^0.10.1-rc.5+55dfd937","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.1-rc.5+55dfd937","ipfs-client":"^0.6.1-rc.5+55dfd937","ipfs-core-types":"^0.7.1-rc.5+55dfd937","ipfs-http-client":"^52.0.1-rc.5+55dfd937","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"55dfd937e4175e049287b9093ed9a52bcf085711","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.57.1-rc.5","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-YIMT7TNgGnDyK51+NlH7wVIblojBxQnykonpw0Sv2vApiULKTiseg1xp2rDBtLww3nF+Q2p9s65iWfBU2HiU5A==","shasum":"750c405e1df2c1a02ef6fcf0cbd739eac85718ea","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1-rc.5.tgz","fileCount":10,"unpackedSize":1863122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFQD6CRA9TVsSAnZWagAA+LUP/jYEMx2xso0a4jJN1N/S\nOsSsW5at6sQLx6iy+FRZX85UYNEVCfbzb6zHvjQcMBHl86+ibCDclWrXFUL5\nqcf6ilaKy1RzIC3zVHJbUGH9eAjWe0nR5snjbyuFi57G3TIrKXN2az//5SEs\nFRb9Ybgx2vzB47jf2vC5yFhVs2KEr0YX/4dbPqot4o4HgRDB+WFTuCjxAVLo\nleoDoRhKChIvpa7zmyqrPD0jQ1xwuuJlO/n9dmXyxBhjyZ2Ut14uGn2F+/9B\nacoKrnBScXYqMyp1tncBAAV8L55CR+a5e6sTM+ZICAhsprSOjWPd1bExToVt\n8EkO3Ff5GgKCVgOQXWO65hA/kgBXsZ5wwA+7NlHhIdm71i0OuSoEUCNWTB+V\ngJT2kzDdnMsaTXPq43vbYTUZbmkDs1kfhclE8vC9ar5pLDjkTDxT0ZU83O2S\nF31Ykxbz7flgu++LQuBFWxB6WayL+/Eioer4JI7oIzzzf2Nt67z8tEsa3V1R\n27m0ObSIdmUWV8yUoJOko8yKn8NHcb7suH9vVYcHmeK0vVrLtXizNMV+CewL\nb+e0cj/nfMN5zKKLW4PtEJF6LEVjFLyGNJ32OjthQqkPkd+Sury8+BxWHEJ8\nXRD4svrWUcgKIIdfLRvNtQY0Zh6SPOXBvYk8q7nEU5zQ3TrZt2/22Jzg7sXS\nrU8y\r\n=ZMU4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpHo2ph6iu8FBp//hZBCKzf75YdvWeLd87SJuTK7vrsAIhAJ+0GAQL7VSN+CheP5BhkkexHoG+Bgzpq8rjgNRb1mTH"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1-rc.5_1628766458554_0.3545237841761051"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1-rc.6":{"name":"ipfs","version":"0.57.1-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1-rc.6+9eb29106","ipfs-core":"^0.10.1-rc.6+9eb29106","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.1-rc.6+9eb29106","ipfs-client":"^0.6.1-rc.6+9eb29106","ipfs-core-types":"^0.7.1-rc.6+9eb29106","ipfs-http-client":"^52.0.1-rc.6+9eb29106","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"9eb29106c07253d50121a5be1aaceaf62b022742","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.57.1-rc.6","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-ti+iAdODPxNjFF8/S4QqMO0XZSaN3MCWzA10EpfC8RySktxdvRaX8FXpi6KjcQVvVitDjRJJUobIr6mOcKbc2w==","shasum":"c5614074a7f1edbdbd703e8cb803b9d8649eb730","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1-rc.6.tgz","fileCount":10,"unpackedSize":1863123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFSwKCRA9TVsSAnZWagAA4+8P/ie160F70H9jejovpJww\n5E0soXLDvil6HgXTqnWWIneBeWeq/m8rynBAYdU2Qnm4IC6XFOQcnQoBaMn2\nBtEakKPPvv2V1foGX6plapH4Gac5B7FPGztd6jNs7KbugrS86KLVj+Aq79AX\nlTYzvvBdfFfnEhvix+KOWp3OFmQJDwcPYOMs6diAon70P3SjhIg1sP1CYk0T\n3n2Nk0Y1iDdu44uDwjfKVYpv6a+bj06FJ6MVBpsm4BbjUx9/l2G2xwIGdQMz\nAiVGDd2DOQyX16y85EZ/n8+FgHjn3aHyJ0MKCc5RmLBXyIQKEELVj5/GWjx2\n9isf/j9XAF36J+FbJSESMAwDu22+zNdyxt3NibLNZe++Phfbo1PM72qP7tab\nvdMvK55mnZWzw2nHReB9Wh2zSWaMvTCoLxnXXI6yELoiejRwzG1d26YoXjcE\nnLe+W7Ulmyoqtumd1NETxJTENM0Ybw19YsLK6YR836V4Arba0P5ZhdL+9R9b\nk3IwkXK21ujjk36YpUmPuqCEpZbljKjaCEmVYeiGLrFdJW+kviGJeNx9M0lM\naig20HHSP/QRZvQxkL38FuTd/DCZkbqkJpjW2C5g4e4PVJve6NoaOVBOL4EW\n75SLNiKIidDEYMSKShzKmQGVkrDLqXaYFj3FyAVzYPbEzcjoCgKaPcEXZxY/\nXGXa\r\n=fGJn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+pQvjh0pHy1Z1UjAB4z9WbLAqbOpstuA257GiYRtxeAIhANFAtTTea21Gi2SXz9anmI3+qhlG8y+77Gw48QgNeJOg"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1-rc.6_1628777482551_0.954764704006795"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1-rc.7":{"name":"ipfs","version":"0.57.1-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1-rc.7+1fa4e8d3","ipfs-core":"^0.10.1-rc.7+1fa4e8d3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.1-rc.7+1fa4e8d3","ipfs-client":"^0.6.1-rc.7+1fa4e8d3","ipfs-core-types":"^0.7.1-rc.7+1fa4e8d3","ipfs-http-client":"^52.0.1-rc.7+1fa4e8d3","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1fa4e8d34f47d1d6273b6d82801d324dcbc6cb61","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.57.1-rc.7","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-IC+Q/liuP80PsMBnEYk70br2BcQyp7lpjnzw+Lil6lvQ+9rQ7kj/4Rpb1fE75DDxS+hFFN3xA+evmOR/O9d+aQ==","shasum":"33a94eb72488dc51f7202e8226fda2951b5d7582","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1-rc.7.tgz","fileCount":10,"unpackedSize":1864299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGoigCRA9TVsSAnZWagAAi6YQAJU16fQyOvUTeCbPcsFG\nUqct6QqJcbFbaCNbrbj0VjzfiVyZ6Por7bAtXNYPCrzUPOEQyYpWXJ1GXDIK\nRIRG10qDUKd201SA8895vvtYHl832es48bg55GFHOpL3JGzE2DUByc710DIn\nxpv6/Xp9xqAM+WefbQr6f/ocHL/t8qoQwRC/RAotkQ9ttRIQqFT3g/f2JoRV\n7B4VC1VZ2Cd43nCOMOMlerVDNsAyIOMVWo28JS92gnFPbU5E5nirotIyVwTw\nyhdAOt2LjRwyofjEn5Hf13MnqDvWbWXKACE8bZWAx6iGsc69+idyOb47/HbI\n0RF83Q95SOJA4ngZD/0Fa3yDVTjIfp33aFEk6ZZgkJ5T78VshFGY8LqJ98gU\njeJDGQ22fWFhQagwWi9YpL2lPb5ksFEZ5K54fI3n5LggC4ZeVHL2ak+VURxU\nwuW/oNJOdm76gKn2IpwzAIMvJMQwurPM2aUsfKUaDcQgZkGj3D7T8CudA+ZU\nKBWIc21jBtZCUamEox750UbD9T/XrVvKaTUQh9JnwSBr3VEPgfKNT3Mq7moV\nytsVMlnsTkJi4IN2JBZ2SB8M/hFbixVK6JqcC3H8D5vdC0n71ttfzts6F0VJ\n9I4uG3sLuggtJ7zlzNAamsd58muK35Y9c/VUJqz4pAPJYJg0kfcdBqfIvRYQ\nX1jU\r\n=qF+N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmPtY+WdgOnJvW7F5eztv/rIv+CFyvq3wngROvxGFObAiAxV61iTY0nt7dyHoFGuuIRdpx27Uv0uGCPFnpCDxdTGQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1-rc.7_1629128864405_0.018922746533228674"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.0":{"name":"ipfs","version":"0.58.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1","ipfs-core":"^0.10.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.0","ipfs-client":"^0.6.1","ipfs-core-types":"^0.7.0","ipfs-http-client":"^52.0.1","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"f9099fd0b24c0f474f5a9a3309c16adad5574b83","_id":"ipfs@0.58.0","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+x64 (darwin)","dist":{"integrity":"sha512-Na5gBQ13IDgtpAamAtH6qUZOVi/ETbTkYDUBEtLm/4l45fjInWUgUFOjwFz7vbL9ZrYaor2kzgG3aB/J4B5nRg==","shasum":"9db3371344345840d749a3128cb22055681a2bac","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.0.tgz","fileCount":10,"unpackedSize":1829117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG5LdCRA9TVsSAnZWagAABA8P/ibr0vrdWEsYJxPe9KvU\nshIVQt8SkaE9Qoe/TBVbn29YBL2gq5StX6Mqiv38lazgdgKaNrCCkXNj2oi2\nm59FnDb1WfJEZZBJKVLkbpgbqdjP7Viu7q2oK76+eKdKbk8J0lfIRduS9P1+\nekswWt22Hqpc58q0+Otews5mdxCp7GEC28dxphhSKOMQIsmkYnTVUTi756Ig\ncVEbf91Ym2Aw8MXaR6hjOkaIXKcA3sC6T75JhBhIeNMyJpGTVUkiAPN71UX1\nHfw/nrUwT84oHkPGLG1LGRfjMm3FOV9973BB0pTICCmNr5s2I00CzI5El3hW\n5TKcn50i+HaMCCokKUNldEHF7bHPZE86WZNXXG/tIc/gPZnkY1C9K5qOuY3v\nvGf1xlgkQhGVWERfkMX/RkHy8zksad1ufly+CRVebUFXnoIhjjF6ESpDv5P7\nIykQElkP7Xl1Wjj07jLWb7INhhj9rHsUUl0S4/5w/b94TV81c6lJAy5IKPxj\nKdS2z7GYy2vAJUoaTLo5W2Smd1cFS6/7Or36ckq98ReJr3xxFZAoEmtOpiGC\nRiTKU5mXhHQqn+L8eZn1yEwQUD0O+fS9sEz9EpnsbcNvZB/VHttReCLjKWK+\n79d5IUkPIEx+dLNEN/KhfhjvQWwTd/Hk2rn5qhwdBByi/NQ2VP/AqBspLkA4\nGJFb\r\n=abW4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsbc9CkVjSoGWb0pRa6AtoS7hoDyvEpCISrzkRn0725wIgbb1iZ0s0LG/+CU4i47vJ2EEHwSul7KOmrGHUAMPLadk="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.0_1629197021045_0.34156194161047093"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1-rc.9":{"name":"ipfs","version":"0.57.1-rc.9","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1-rc.9+c1375617","ipfs-core":"^0.10.1-rc.9+c1375617","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.1-rc.9+c1375617","ipfs-client":"^0.6.1-rc.9+c1375617","ipfs-core-types":"^0.7.1-rc.9+c1375617","ipfs-http-client":"^52.0.1-rc.9+c1375617","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c1375617b6d7137e098375134097d61edf316ffa","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.57.1-rc.9","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-OmZJndxotBk2E2VQ+4ttjqA5ktr/352ZCrYqeq6PLug7HpJkItERtOarkZvmq24ZecBjlfEC4qztWrx0mQ/lXQ==","shasum":"b76ee467b715feb6c03d173c9778827dafe0dc02","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1-rc.9.tgz","fileCount":10,"unpackedSize":1832743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG5T1CRA9TVsSAnZWagAAvTgP/RAUy5IwXtGYWNqsX+q7\n+e06fqCSGh0QhM4s55jBH0bv9n5RcFMavAeOn57dMdY4Q+z0WMIa7F+RMjlS\n0FO1gG5S+QbLZjrrytQjuVNFVPvjiOX5JF3RMJp+O5b8YeVz5H9ucoHOTyyo\nA4/++hBooIwGcV6otylZ1McBEngDMHEakhHWf9lwstLNg3+j0P+Lm7kP4Zcx\n123mreY4jt0Xt/SnezKZfj6uVuNwOZonCZrimLvLR4bx50wEMcR4y4+CxQlF\nlTH7NZzBZLQ7AVjElt+FN0OuTJLx8L+rMlNWhHkQaAd59eudN55xhOQdYjqm\n1TbNfFEHCKQc0iJOWaq8KQ1HiOtUPXze9hb7NMZCpEh0oNLUjLeGzz4RmHbT\nSyi9k9SP9ST6BkfC2m1kQ6i6Xf4eudCSdSWA4B+anA0tJ7fcM3/CblOXwaQP\njrU4HCTzRL57gFy//isBCODfBwELztYZ8sMgqIn1HIKFj3eFCG7/wltAXXMu\nYZ6LLxYytcwXY/8/+wyGNdfUaF1Dcnyz9322CZuau9JFy2F0O+pkXT3Fxrau\n7iooZOQE+caYqT6+Ux/K3i/15wRSi3T1G4totRl0sqsT75ft3BAuW4XvhRfj\n5oRb3aEhevn2s8VGcOahtAY+VDut5rsDdLrUTnwZb9IOz1v0yN4iecehuU0D\nmFys\r\n=Mwxi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjeEKmQIXpCFMYYRQjorldyNPJ1qBXNACeQW7OUmuyBgIhAI8f/7sQBvu1v7rQ3E97DfhjmY3ekdVfDEjwJyTmBSW/"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1-rc.9_1629197557682_0.9275723030835581"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1-rc.10":{"name":"ipfs","version":"0.57.1-rc.10","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.1-rc.10+2c1a23af","ipfs-core":"^0.10.1-rc.10+2c1a23af","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.1-rc.10+2c1a23af","ipfs-client":"^0.6.1-rc.10+2c1a23af","ipfs-core-types":"^0.7.1-rc.10+2c1a23af","ipfs-http-client":"^52.0.1-rc.10+2c1a23af","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"2c1a23af193a23c4a710a9007c7c22b4b729c7b3","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.57.1-rc.10","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-t7Xod45t60PvNPNkpDt8l0nSK8HqAaWRqCLsKHRCmz82pG41vs+jdBAxHCF20lSQI1f6iTQzp1kevKjsJsNQtA==","shasum":"eff6e1ffbcc4efa42bb516f4e6dab5f498d49ad4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1-rc.10.tgz","fileCount":10,"unpackedSize":1832730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG5kKCRA9TVsSAnZWagAAmWQP/3UU6H1OEI9uBdRys9Y2\nmcnNNpVbnrWD3l0H09Cb2o6xe5U/OCuQvPQywZmuYKx62REUXftbxskV4NM8\ngSTslctvd0gavQtaUiQ8Kl+Jjfj0EQix5HqmPzxVDr/0C1lh/SXXRt2a8pr8\nESW34menNgEEv8jVnzGAHebuhryULkhdXnI4dy/kd6Bb/RfnDsPEO/4ANcwK\n4WAfmhJ2Sw8qx3OTQRYmTH+BBQx0IavZ2GHhGbSvnYxDiGz13CkuL1JVfLdk\nIv9zxVkj5C+Xi1ZoOyHG5ryFdsYxz8FOq4T6Vt7UEP45mQ5LTGppOBO6xJB8\nsKfJOLDksogqn9WlMoplrOp01qLn6XPWsa9bk9rmrxwIiVH6lnGLfM8MzLfV\nllrkhkHOkkkFKvYaFSs0PwMtgEiS/wz1J+ZBjmBjQvqZE3A3eZs/EBvnEGc1\noeovgNhiHpQcB+F99Says7maIcVReaqvqp7jhgIm1vTRtkgOEByU+Oi/QDYb\nyEEoCaD+jVLaws2HB3ijl+kii5uI3OiZMC7HFHJhw9QtzcMXubrsne+qqKPP\nmp1XeCWJubPp+In/sDi+bH+WVI5PXg9kF9eXfMNfktmwG6kjJqsPtdEJYasj\nlJQN4YIkqQuRH6H/OJGgfiQVu04Xce94GEA6VboOLGereHoBq1QqQqGDRx6g\nrSeV\r\n=O5Ty\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVyLjkWiGen7VzKDCW4vs09tMD3c3WhYpaS7hGo703gAiAgNg5rFJmfLoFcIQLNG6gotGAUcJZjyX3bQNLXhOTc6g=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1-rc.10_1629198601642_0.09080958038670528"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.1-rc.1":{"name":"ipfs","version":"0.58.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.2-rc.1+438110ca","ipfs-core":"^0.10.2-rc.1+438110ca","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.1-rc.1+438110ca","ipfs-client":"^0.6.2-rc.1+438110ca","ipfs-core-types":"^0.7.1-rc.12+438110ca","ipfs-http-client":"^52.0.2-rc.1+438110ca","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"438110ca4bce91dc771eafd9d6589573801b16aa","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.1-rc.1","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-qyE/PIUIXHTvWCjuC/GySzTm3fnyABP/BWDSdr+E86XPQ1Czqekmovbj4Zl80kVHOYN3qDjzvGYHsoYRt368Cw==","shasum":"dfc12ea26cbf0f8eba650c2fca6599c5dbb7c080","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.1-rc.1.tgz","fileCount":10,"unpackedSize":1833064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG7H9CRA9TVsSAnZWagAAwd8QAIBMfCPNKFzomEXsYQNU\n8s2I5XuC0kVwxQcaMgCJvuYGTyJ37nSN3esKttBr2CeCtFZHjD3UKYBhbn1/\nMxBqaPenrsdNJMQ0Lr0PIQPSRc3b8ahCWEH3utKiIlm5fxsT7S/CpwAEohMl\nzcQIesQCdWy+2fO6sgnPM2LkQspCFm+y2VsR7ZKEQvDL/bup+6RzzxdoP3/y\ncylS/9tEt50f/xfW+e06YhOJKTsO1mkAGpc2RWDbo1RC/MEoT3MBASUPKzx/\nE3oa8bYKnle22zHKb2EHoSiVkIZz0EJSNuBCRjexuv8LuZui71qoyueYPA0+\ntLyCJHGLj1tNzxwYawC5qkUgpDEG8HajX70QoPFdiMJampF0gmgvnDYc5pM5\n0NEBp5xCF6RrA5vs8pivGISw9PhrbHWNLVQ1Hzz4bJ7u3oqYkRsLvO3MjiFL\nnh4/UTUsd8KEtq0+XLlZ2ovtUNuIx3cZPE5lv2rmDq389XqDJZ17VeWG0dTg\nXEH8clxy4d+6nUBoPacC+ImQlq31lR/q3MTFN1KWJfvm+f6MkYpzaMxMQahW\nMObqQtREqFz2GBH2Jlh4PAYeyLvw7Xzxtej72AxUnWhU0ssE1hIgcI21J2nU\naCNjQmGIWpvh1NdIS32DipQThKXcZ8nca5BG75sAntcFSUiN5vthKEUl0aQ1\ngtb9\r\n=mDxd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPs8JGyaK19hAbyOhBjJxv3FvFq4ckElQXnZm8MGyo+AiEA34huaVRwx30Mr86V7EBq2TNLe1C6aLj95f3xqwWm3qw="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.1-rc.1_1629204989297_0.3505930443786247"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.56.2":{"name":"ipfs","version":"0.56.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.7.2","ipfs-core":"^0.9.2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.8.0","interface-ipfs-core":"^0.148.0","ipfs-client":"^0.5.1","ipfs-core-types":"^0.6.1","ipfs-http-client":"^51.0.1","ipfs-interop":"^6.0.0","ipfs-utils":"^8.1.4","ipfsd-ctl":"^9.0.0","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5d739b691addf328c2865e649db1c52a00d30711","_id":"ipfs@0.56.2","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+x64 (darwin)","dist":{"integrity":"sha512-UNDRraQ9ERc9B3F80jrTCyGHWLby+MRjS7mpdTAL0iq8Kde7OakIpUm2V3EMHd8qxm3G2gJrzdyQFRhMDd2Bxw==","shasum":"7b68bf9716cdbc6b1cd6bc51cbc2f3825113e95f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.56.2.tgz","fileCount":10,"unpackedSize":1779362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG8NhCRA9TVsSAnZWagAAFYUP/jB/wWGPmy58TQr9+UZ2\nnliYxW95W7SgtzuiD20kVQHUjjpvESi8pGixaY1pSBUlYmF7G3v/uze3+Kmp\nBX5+bsdi8G7T7UD7vKxaF8yFJ0diIeFnj3iKl5kUhyzBdX9hgpGOjLXGZOvJ\nVNS6XK0GfxyadEMvykAdBG/mNY0d43lWtvNduwLSj7krunlFoliQn46Tbe2p\npVojp/MTO5M95DrdN6HvdysR1HrebeJWDUv3Q5tIPIREHL5facDjlzd7rI39\n1V5h09gFDmshev7Y+ZeIGoTTvBzZ8MhQXFNWbLptf3SQZaejbKohoAqhRqjp\nGuu2hXHV4N9Y2DBozOStvSBfRsU4P+DI0lSjy2jL2+mNa9S9Ahdq5OcydlyC\nUgoiO5YDMxrr9+dEBrx3Bp+Gsiu+A/B8zKpzqdevFpW2+BR+NkVi6PgnKZ8C\nr2ZP3hk233YAODI/NVh2wOeclsllqgBMAEL2GuL/JoD1BjHbaIv+4qTlqBsJ\nO+okIWL5LDUJ3fRzJHBt5oxKSp/DjRVVgqJqXcgcJV0wKuyd5BBQVCklZGTk\nOaBnifcaAGbPLgIU1pse0yNGynTlMd++lGXJAzbcGb8MPODBEjKeVYZI72G9\nSwmS3aO0NkUX5gCjK4+DtYZ56759VOLSamZhA93WGgcCvLBzeKUE2EWNcHJo\nRpb8\r\n=d2cv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2enKoNsenRlCX3dH0eDFKfr0OiwDBXNSI32f8dbsgSwIgahFJ/AVB+DyNU17OYNT2bivNlp8EYg7T43ghbR7R1jk="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.56.2_1629209441202_0.30209216972594843"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.57.1":{"name":"ipfs","version":"0.57.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.2","ipfs-core":"^0.10.2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.149.0","ipfs-client":"^0.6.0","ipfs-core-types":"^0.7.0","ipfs-http-client":"^52.0.0","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"ab52012d0367e121ac2787fcbf1ad6c928d28479","_id":"ipfs@0.57.1","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+x64 (darwin)","dist":{"integrity":"sha512-txjtAwD1xg8ky2kP/3kco0ZHluNDN3bKn+d2QYJYuIUhZ9R95P58T/BjeT1xz4/QU1ktWXCb730tVTZU0j9SeQ==","shasum":"e1806599236b0cb10b632ba03aaf8e5f8ae55b7b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.57.1.tgz","fileCount":10,"unpackedSize":1829233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhG+9uCRA9TVsSAnZWagAAfLUP/25miYIwD9P/48nZCYXT\nJAwue9isSLokFNOZiNe5gb5U+WDA4E14AVHPvMU6FNBUSbv1WqZfrPfhra4g\nx2ZIaRQyk9FHJPDHWnayM2AVvsilcJTOYZfA3BEG6MoMovzzLxu2PvisyEB8\nawVPHnwHRP2tDSPtvN9KlaxUN7bvEbDIXarGfxOIobjoE73g6LNsKLB3x8Q6\nMTT+aX6nMQB2UkFxYTIQavMrHlSwldG6NXaLSPfpF+/e9+Yd5pQXzB5/I1Ra\nl4rTnAl4D6uRYX6Gh6rrWjW0E/iURLdFEoq2epjvDAZmLIXHu1p/jGtWbzqL\ndnuDZdjFuiwWe6kYuHQnNAZPCW8jDRe0+SiA92N4DNMxlRvgF7WvQo4c00MZ\noMJOZ2VQDHSvniw656LMMuzpwq2fqUGHtrrxfo0dJWCn8xsy6QOzZcQkn0Bn\nVYKcuO21xnZRzgzJHrPKFn2VSRFvLanVp+0KySJNeQRWC2G69dyRPI/uBvze\nZfx1uSGn9ZnktAl1JUXf334e9wJzE7eouRLayJeNy25e0oAIhAiFRNAITqge\ny0zxxkVYy1IOCZj03xbnr1Cege3l59jyDpB18+9PxrAN9vPIoeJaxpXwT4oA\nbRFAX/oBS6JXGDD5fuGaRNcjX6vCnJeMgvXPnDbvThZFU/6FM86KUSaeWJwH\n0hnk\r\n=mJMu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1OB/K2sk4LQCtVCySbI1IHs6aMHdHBW5FIuJJoIXY7wIgTaGi/2wdw6ZosmGi4Qwq0LJt7Vwux8B+TQeNmRxfozU="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.57.1_1629220718402_0.18127401124375497"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.1":{"name":"ipfs","version":"0.58.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.3","ipfs-core":"^0.10.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.0","ipfs-client":"^0.6.2","ipfs-core-types":"^0.7.0","ipfs-http-client":"^52.0.1","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"20e7c54247a7f6bdde374025a9ae4a23ee8df0d6","_id":"ipfs@0.58.1","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+x64 (darwin)","dist":{"integrity":"sha512-yeFuLk/VaHznrJFJVCBkMDpWSGBlxqiloIagvv/SePEGvgNpRlyQlnd8B3uLdk6xqhHuSaiWsHHuOL0cv64gbg==","shasum":"63e53025319c6c78e56111e7f4e6db92041bdce0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.1.tgz","fileCount":10,"unpackedSize":1829261,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHBUPCRA9TVsSAnZWagAAuCgQAKL1vppl6trwrz6xOJmm\nNEZza9A/q/RPeNlY9ooVsdNPX2MXs++zVuLTD51fvWUAz7irFjAkTA1jERfq\ncM2LJwQt1Z/j9bz2JUOmK3ZCD7iy9wJ0zteGKl5h5eO6mNP5VmLDe7q4Ew8x\nlmW1ObkF0y9z4/Wb2Y5jD3j2KNQ3kuiNTq+m7kp+gk6uxd1doifGI27VVmxY\nkzCsOTW4oIZUjsqHL+F+xmdmP+r+h7i3NgaHaiZUNI7b6RAaez+S7ez1+Wmi\nsWX9DYQCS+ylH9T3GgMyp2Y4/JOULNLHZwixJmBCCkpoMCxXruEYyGopuis5\n4r14Ul74Nqx3hJ6JYdM0iJR7D9AEgua5wm4SH2+dUms2bo9+kMVkMjC0LEh+\nAQ0UGgsCz45Q2gIrU3xGCBjmK3fve6P7n0YUgFLwMvZV1sR5XVhm/mRLKOxA\nJgUa8UKE+2mJm2AKQLpIDOAwE5GLSxS3Mn3yjSWuRuQnBstGx1VCXpEvr0al\ngN9fiUxOA21zMjF/qzHJjzPA4d80cXquF6QEu5kKSqNeQOeQ9xhNEjVsNLOO\n3KDjGqzLNgHzHXUmc2zIuZcN26lRFDFwlfBOCKs5LRzXtH1c1sYhfYN5iTSl\nlKIhNBURPMN13Bb7I0YKYr9m7bF0nNgGoWDawavuh1C8+5Qqzq9g/BS1xebN\nIAky\r\n=mq86\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRt+AHtwvL95+cCcmov8N2Hjn/PDMMOrXjFjvo+SdkbgIhAIdNtkxJ0lsHFZZSBg36DISJU+wwuy2qdj6gKO4k/LfM"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.1_1629230350956_0.5318185110550935"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.2-rc.1":{"name":"ipfs","version":"0.58.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.4-rc.1+abcca045","ipfs-core":"^0.10.4-rc.1+abcca045","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.1-rc.4+abcca045","ipfs-client":"^0.6.3-rc.1+abcca045","ipfs-core-types":"^0.7.1-rc.15+abcca045","ipfs-http-client":"^52.0.2-rc.4+abcca045","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"abcca0453a2b769464a46b23d1f45319d62d0aec","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.2-rc.1","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-/RbMpoRbyC4aGp+CHnrBtGY4Qq7dM7+2LSkCruex/YBRRA4sPlElbMp/XFeEld3dCx6Dxsh7VanoAP/zyvH4zQ==","shasum":"cfb470931c42a9db1d651a279b25d48994a85202","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.2-rc.1.tgz","fileCount":10,"unpackedSize":1833208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHDCKCRA9TVsSAnZWagAAWCEP/j71oYdEw22meja4UfSS\nyJohYEnFxxAKcHb138CxQIwy3cVVUPVhIpSiCQoVdTzyvR2M2Y+pR89KOaP/\nwkfxDPp8jxsNezoHTf2tXzUo1zpy4jG3b+w2SamBG8NFmP9ZhidEYciRFI+v\n0M2dolwpUfYrVyvr1Jeyubt1VhDXgiB8dzLP3GQnL6Ix5AAFzKedC/FoGEhz\nTm7nJzcl92vIOwIlLlZFvF42i2nOm1AZ0HVBjcvFxDs64F9lOC3Q64saJQ2l\n3K+I+g9BwevdmgqL3s2p2fcJIP5XIs0BkyWZA+RAnWq8bu5wqk4HdRDpVJxi\n8WPMpYSRRGeHdeYwkzHQ+TZD8y9XxrgEh65slctMZYtq2txZsl46wp9b9/5f\n11/Saq4PiODVmqIp3rsMoil/IlRz2vrun6EaO9lzHODsRkdwGrmOQFwNfZh4\nhlrFpE06pR4DIGEFV/o9MIqUrdQLOf28v5WywYNARX/5FS8k7QPJBu569xYo\n5O9WCKlEf/JdbS7+jEPT15YV/F7qTiShLzTZ8oF/VVwrhYy/aQWlHefaYeA7\nHlkNG9LkLTeDAx9G/AHMr0+VZpcfEZxI0jwTXin2BYUVFCAtIEGcPjL70Dw9\nL078AISVQN9Nsg0bahNLq5QZ0TslW7uehJfmy6dA07TFPsjy7Hq20WlcUNd3\nIW8J\r\n=l1ee\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDupInnrVh3moEDn4MaWZhI1MMF65HBZAUCmTU/2SBivwIhAI6QDAHqFV6TBVsgXcOHS/Q1g/jToKYLhmA0hPFulvfT"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.2-rc.1_1629237385763_0.10302432937755102"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.2-rc.3":{"name":"ipfs","version":"0.58.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.4-rc.3+beeeff01","ipfs-core":"^0.10.4-rc.3+beeeff01","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.1-rc.6+beeeff01","ipfs-client":"^0.6.3-rc.3+beeeff01","ipfs-core-types":"^0.7.1-rc.17+beeeff01","ipfs-http-client":"^52.0.2-rc.6+beeeff01","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"beeeff017ba49c3a171d8990389a67eb5c3103ae","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.2-rc.3","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-Rj/rUdluV6tabsSnojkqEKenSnvCYiYOJdQoVHIlZqoARmPUAbcc8H9Y0zEZTKXBdTfUXMSNXhhXffzp21MB3Q==","shasum":"965bbfd8eeb09d4b228ea5af20bafcb6d7738aca","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.2-rc.3.tgz","fileCount":10,"unpackedSize":1857093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJfIrCRA9TVsSAnZWagAAoGgP/0lVgvRh4oP5Yl6TqSig\norZxS+SUrOgtupkQp6AH389VhP5TUeya3CWiCt1PdfcRBw/K/DCgoFaHrP+o\nD7c27B5Md/BpdyIdxJ4LfHMs0lhnEhmqirZoMqSwX57piWeXHHE3ctxfVXg4\nNJN050MfLFT+a3sfo14jftBuVbSWKcaC2bIO9WlM6Ev2z7TqvAL+9qy0pmEt\nBQ7cFwNjY1kha8bUrnYG8I7pchEVCVJa3atEgThZJsBZr3bPVnOSTEbCW4NF\nleMob44wJUG7GKrmJLC/LKvZC9DoUWjZ0LUME2KYGvOewvaHBclkjLVKbfdU\nMI09LrXeVbOmSl2Tjkw+s0TI/T40zuDOuimtW+W/jaX/VnjnL/qVLLU1dhDy\nZWNvpsTUrrsK0hd77fGROi8i8EMguYRn4pHUwFuy1tXZMjggV6HFC6LKHR2g\n5IlLaainRBXLSXQtEhxjxUxe78j6mjlfWX1Un/ZXI+BB3xOETtznDlLJc2Ix\nBFPsWpy5SKmpm6a+lmQs0bEV/C9eib4KQPHke4IyRvCEyO/Jvl/UVziXrF0E\nu4w4Xe6aSsmivQ5a03lBgcaVCaN+AOPjonFz0xHJwM9DzAGwCfGEq0u1eEmR\nj0b7/vdZ/DdS7VLTh1gEQ2p95Bs8mOvQlstKPeYu6GzQjh4nvEhGg4aDsqh9\nddjx\r\n=k7/2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1SbHSgw/lvk75G/jLOUr2/asd8eA28KlR1o1L1meeNQIhAKLyblx/faKx8unc61DPXBCYty1Zy6/fphBaVkO4QNAr"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.2-rc.3_1629876778833_0.29997198088373866"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.2-rc.4":{"name":"ipfs","version":"0.58.2-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.4-rc.4+aded7dcd","ipfs-core":"^0.10.4-rc.4+aded7dcd","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.1-rc.7+aded7dcd","ipfs-client":"^0.6.3-rc.4+aded7dcd","ipfs-core-types":"^0.7.1-rc.18+aded7dcd","ipfs-http-client":"^52.0.2-rc.7+aded7dcd","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"aded7dcd65896586bd46024bdb562c9646056b7a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.2-rc.4","_nodeVersion":"14.17.5","_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (linux)","dist":{"integrity":"sha512-j4vzb2rVKmnn6ZWfin/IIqwBybxvVh+qf3z+J5SVj/SmcLHhDIEzTBzXz3CtBy5CX70VTbq0m9fJuE3Gys86hA==","shasum":"d91967f47661e8914e9da88a216fd8b70d2e20e5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.2-rc.4.tgz","fileCount":10,"unpackedSize":1839767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJgUDCRA9TVsSAnZWagAA4FcP+QBdZecDkWrIzRi/ZRD3\nnByeY80jdKiL7f17sxImdkQ3bM1Bjvbb13sRg5XfzGAOvgtSfT4JEhMmFFJ4\nh12lTe956VGto39F+rYzLgOjCkVuHx5amppxk1G+a+Zmyb1h6oRwZ4lXeiQT\nzPk6giXFagVUA3/E+dOoClr+435YI6KXxGJX8a2j1+x5Eq1wUTNHbPrtxzOS\nQ53ih2wWHxaCaac77hXgQybkUqUTJJyvyzkk2PODAhc6EpMV+42PBgIyEt9C\nVbnW0kEHdNr7ikwW6pIZslFD2MGuMjkDnJtfF5FTkUeWmvMaEmA7uXgkZQt/\nX1AHJZw1qmyULp71aHvOb5kACA8u94pSFfmwaQ0NByxJj/Jlbvq8mitH35pS\nkhLxp3zkAQcgaZluhziwyVMh02cMo+Ky3CZmMCCmsFNwbYMKywPncxw7L9N8\n/6GieelFKPX0K9dU9BbKZGInn+QG8AyscsMgcZjQjVHMFHpYTcysT4Krgl3/\nCUD2JQzkozYhwHoiJfZh7rHcYVANYIRBYOj2/G6FreGFwIGA4jmEVUil0KV9\nmHJEvhX5KEMU0Xqnks2VHiO5xDK4WIBXD1AY8PjvLsktfJamI40teFeVnrAY\nkDKIrYxZQ7tZzLPblF8PobpnrBIXhSP1H/KafhXFIY73e3X1i1rCYWD7Ycl3\nDPan\r\n=6wFu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANi/JlYQqNeIg9TDNOnFbvitPioYq+nkdrMT8qWZhOEAiEArYciXMVrpv9t9yGPcsRNGXwkBNpsw8VvindB+QNC/eU="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.2-rc.4_1629881603018_0.455328635447549"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.2":{"name":"ipfs","version":"0.58.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.4","ipfs-core":"^0.10.4","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.1","ipfs-client":"^0.6.3","ipfs-core-types":"^0.7.0","ipfs-http-client":"^52.0.2","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6ad2b40be914098981a2dbd370396599a918d0ee","_id":"ipfs@0.58.2","_nodeVersion":"16.7.0","_npmVersion":"lerna/3.22.1/node@v16.7.0+x64 (darwin)","dist":{"integrity":"sha512-Kixh2am9ZI+ecRd+DPlN5ul7BXRu0jCJ0dnoMtOP52d2AKGXj1iuwxFkw64ReRO26Ux6f3rBuyt35k75h1MAWA==","shasum":"2daa7ccd9306531787f38d430610455720a7cf08","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.2.tgz","fileCount":10,"unpackedSize":1878351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJmhbCRA9TVsSAnZWagAA338P/0o8Eo7eIMHVMjxVbzOY\n3Uv0BJkzA+6702EAVtqIh1Vvbd/FwFt472Oh98A9Eizy/Qs5g9e4ITdHN+tC\nKCVt3AWr2TS8846SWJNxrOGji3Vy/RHebb5Jo3CJFGxlOaqO0SawveuF7nhq\n2GYMyhZb2ef/e94Y+aSt36x91bZySWNpIuwqxrGH/rjLD5kNHgFNIEyQF1wd\nhkjy0ag2SdTPzvwHh8gQHDTFUJTjJNU12aAt5eyk8G8oTSAj8A0KZEb04lE5\nuMaiZgL25HYg1dQZPSgMSCXqpNaPMdEGDA7wIE66tlqc+NWWFPn3RH4Wqvur\nyU/7w1g/n1D5tesvj9KKEqz/bWk/Ue9913mr93mMx+VE8DxEyXLCWoVjL09L\nUxubr+ERUrPWiYbJNBTbNg1/egUtCh7GC2Lh+YDYMjGQ9XvP7B3Az7w7adcR\nQNkaZnCEp2RzSabHtxCkpdrRBkdijfpq70M+O0fSbWJpuk6BADbwG9Uf0tjT\n6UHA7x9YP5NZPxwFzRlzh53DaaorKrJxMnWM2cdz6NGoQsiwlcXe1kzObkF1\nu2XMG0U//MOBp04YWMjLeT3eEnqaq2V2zafw1miWV3eRAOZc+dH6a4ApxQbp\nTNArc2MI//MWyywGdSzI2e+wAt0ziTOekNEhc/apYS+hHlXM7ucW7u408Ehi\nVYIq\r\n=4S4C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDY534fNY+Bz4OW05toWjHYhQuQcohtPiQlDL1kDEkHsAiEAoBU7VcfYYAiNS+88EuoQjNxb4u8ABCaHBnwNTvOWqb0="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.2_1629907035379_0.31366985221901866"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.2":{"name":"ipfs","version":"0.58.3-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.2+ebb6c552","ipfs-core":"^0.10.5-rc.2+ebb6c552","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.2+ebb6c552","ipfs-client":"^0.6.4-rc.2+ebb6c552","ipfs-core-types":"^0.7.1-rc.25+ebb6c552","ipfs-http-client":"^52.0.3-rc.2+ebb6c552","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"ebb6c5528eee66d07ee64c4ce105e9b1228cf857","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.2","_nodeVersion":"16.8.0","_npmVersion":"lerna/3.22.1/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-2sPNhMvbW5ZR6JdWWRtExnF87zGqNbIYW9BeeOhWSSU3bsWocD+5aLiqneNFlLly9nxJTzDjYXQpPb7JdSt8sA==","shasum":"3b068bf1935ba9160d55d7981fa972ce270e5183","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.2.tgz","fileCount":10,"unpackedSize":1878532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJ2N8CRA9TVsSAnZWagAAmzEP/jzLpc0Q564TH22lwQck\nnuOkGmV0YGhHWUw9Ya15CwVDfg6gtdRFLUjhXlANPDTgc0Q7+jJ9WqeDylPA\nOY3EcdhL1zHRVPbFKUMqm/S/sUHl/hJWcGDnYAk0g9WCSv6wV34rtfgMvBU7\nhpSqshk1FTiRdM2bWzYOTtcOLaMtTleusY1JvQIJP6P96WyTkMpet6Cw6nyM\nGriOas/CNK/JT4veFuj3CfDXbDQVflmzMs+Z8JEXs9aU7uPfComzxNIYj9Jj\nbSbMX8Bp9WlmJY6ERNyoiUE1KfuJW1s/J1f5Noz/DoGF84ip7RM8vF0Nyyji\ns6WjNV18sDLccjShXT8kDXeoHamLHbPjV3Z500PFlyjSn9evYsoxAAL1vWni\nKVdIxNQ0/ZsLQKqCHg48nXZzryC8s1icignhAbIq4p7SiOQxRNyKkLkF3I8y\nucRcvy8sWkIkmkMez/pNcKDQaN4ARo0i7MuYkPOEYzOqk0H573XL6Vha///Y\nPZB+9XJ/eE2IfWGkNkkrvn2eNomV7Pwf7lBcKKbWWQ1/VCNaoHznvniC9Mn9\njlFpxgg/3XivHD8RaNf5X1w0VSUJv8EY6Llh8ZtwsEFZ2jYKLBiZTMBsHU+2\n6UNhJYja3mzls0rGlJ2zVlrGW4QIoEthktXLCQYHqOAikeX4rWmt6pT+tPmc\nacOJ\r\n=GNkd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp71ovy+Syx7jPdJYfuWbsRsTUEAc1bKErAJ0la1u7dAIgJ+pyKXfwquPIqVuI2WL5cb+cTc3Bsos24RiqwWPaeNU="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.2_1629971323748_0.33211263038171945"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.3":{"name":"ipfs","version":"0.58.3-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.3+6c46a3cd","ipfs-core":"^0.10.5-rc.3+6c46a3cd","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^34.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.3+6c46a3cd","ipfs-client":"^0.6.4-rc.3+6c46a3cd","ipfs-core-types":"^0.7.1-rc.26+6c46a3cd","ipfs-http-client":"^52.0.3-rc.3+6c46a3cd","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6c46a3cdaf6e9f8756632e501019923a01503282","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.3","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-EU1CvCUdk2oZHZ5kty8BNgZbYELQCJ2DRFm2jsGwxSpr6bUA6xcLpZxKUXO+MzecFRwDionHIfmmEYf7JjTmhg==","shasum":"c212de65b7f31ab341bd6129fa972a1d74ea160a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.3.tgz","fileCount":9,"unpackedSize":1722227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJ3auCRA9TVsSAnZWagAAU3IQAKUNYaGwOEnv3KH26O8u\nAnGvh0+jr7BAo/UBhBO70hjkyn3u51+06YGaN9L8txwzU344ngqaPoPax6Vs\n4Z+/rc4X8f2au6dM0kWdSpo/XmsE70ld37iVnXm3X5mya2sQ8v6DSAB8nkna\n8pSqWpq5Hvvy1zLWh3S3bkQz3QQHIe4pbBQsVTcDanbMZHzKfPAGuvlXc4M1\nXYfsGPqavDfQjBiap374z9/PvYuk4sQZeATOv2FVnIXU+OmAqvVByUBu6xlT\n0g2SgVfG1uACkvDgUQ88oTWCpMQL2QW8rIs8j/DuVGe6zD2wZbgNIYcZigvi\nHiqNIrZoZRO3jovcPefAPfeDQzccrbtmMNPa2/mrrFVDNE66m9vg2JVP9PwJ\noqhUkMZGveteC48ZiU0t7bnhVHiSeH0bDB7JpbU/cQNpHNSyMy3nbqcf8Ac6\n28WFOuoOegNjwCqhf5BuAcgLOmFYMW83qTCsRGEVjzVAREOlXJBON7Y1ObW3\nfLWADHVoaLNVYtsmXYMG3lc/87SSOqaCS0zdrJG5KDA3cX+9yKgP3rJA+foh\nbO5oPmBQ59i8CygyMoU+hBQ6t5OiL3c2pWquRKkUsHEw+KmdTB/Jo/N35PaJ\n9vjNNQhakzxYTWmH+YlsoCDdq8u5f2PqmmLLa57vd08+MVDmfbh5dSPqTRxw\nmLBf\r\n=Nc4O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdSHHG51iS3hQ07Z8EvwDb2bzJQWcH/2Wc8ChcY2a2RQIgZ5wVqEoRZ22E9FzgP+P7Gnu9wa00vwne4XThghY+L3o="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.3_1629976238030_0.8245097617285371"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.4":{"name":"ipfs","version":"0.58.3-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.4+1ae25d01","ipfs-core":"^0.10.5-rc.4+1ae25d01","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.4+1ae25d01","ipfs-client":"^0.6.4-rc.4+1ae25d01","ipfs-core-types":"^0.7.1-rc.27+1ae25d01","ipfs-http-client":"^52.0.3-rc.4+1ae25d01","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1ae25d01d93d192d8242c7ee48ba338064ac9e03","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.4","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-hLla5EzhvGfGLmrYY2bHMORPZTN4szez8+J7iI4p44DxypjoRC7MK74/TyncrL7tihVZM7HJlh4OHjhebj63Dg==","shasum":"1c59a53799fd5e044728a0519975b9622a47727b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.4.tgz","fileCount":9,"unpackedSize":1722227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJ54UCRA9TVsSAnZWagAAiVgP/0NU76CYCt0eXbBudJ+K\ntYqfJ4M+Xbp4aizPtbv5hvEvI1IQja69jixrmly4HDkA45S0hIejbvuHxARe\n1sQ+kEqQiiZEnbGKKyN/D5qgo1RLlw7FIlDWoA8MabEGFy6W1igwkz2HA0Ey\n/o6k1ee5YmBGL0KeCSrN17YlwrPHulyxHeZrQi4umuOVYzJFDgxHF72PYQWm\nY+GBFqxsZg10wJu2Lq+FRIpEgdgNalPQpDxpOtUbvHqSr6jonyxPQhPVxxd6\nh8WRmXzgHo342+sqyYRrj0cTsSOvTNN+L3dygRKhUtiWbFIRk7I+b2ZhaC+d\n9p+rc6pCllUM0zXVk80ImVvalR7PQ55+xr5D2M+LIdNEx7arZbeAdx93pEpW\n3DZmLOm+vy/i5N5Ywf7Q4C6AQwTDqFnX6N7dk5TX/mqot9wODYK7MAJR0jXB\nju0VNlFNpawlCsTspvyNuE9j8eMW4aV6uZNfHaNuwIyqgNo77R5el13/hDVV\n2aiutfHknDkaw+uw1JMakZ4cwtl8BagoirhIpYWnpyNObookUbOIECaSkFxo\nf9IrpI+cN4T4n0pxXLRg8V4lgvXkV7yoFmifQtPwzb5XpFDX25mVwygB9miP\nD42mlGECUSMlflZtmLJ0qJlY5EbXxpljIDTymUl6Ik+C72prTqRuQhYc89Gh\nKk+U\r\n=GPUb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNHLnlcbCaoECn5A8J8CeqMK8M2f6suUDXtBoNqsxmHAiEA+u0Td0QNT8wpfCVAnD+LDGvVGVbqgu07fXWBFWTyUGc="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.4_1629986324685_0.957790989292139"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.5":{"name":"ipfs","version":"0.58.3-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.5+6737f38a","ipfs-core":"^0.10.5-rc.5+6737f38a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.5+6737f38a","ipfs-client":"^0.6.4-rc.5+6737f38a","ipfs-core-types":"^0.7.1-rc.28+6737f38a","ipfs-http-client":"^52.0.3-rc.5+6737f38a","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6737f38a27cfd7a7fc44afeedb1a7465cb17a3c9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.5","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-9BlnkjBnSQrc605XoafeXn992ztomEbAMSGeFzQ+vscY2BG8tR6eoWrhNBOJh6liUt7QYSg1LAJD3ue9QKZ02Q==","shasum":"936a34454b1847b76081988532b3f5ac14bc0967","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.5.tgz","fileCount":9,"unpackedSize":1722227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJ7awCRA9TVsSAnZWagAAN/YP/jxM0iusUFYFvBB8F25U\nPIeojuDAJ0OSFek+08DogneWOKgeQaCkdC3lnEE43gpaRv5AaHGnSGXVGxBH\n1pKqJoDyOgImcpoZQmNqO7jIDurktbOxWzSU2su/P+IMZibGRKFE+iBDX8Hr\n/8kcjTuJflgGJMS884YxllqwdJ155GIMg8xf+fmzjkyqcL1ulRZ62eHV1fS6\nhGHagZ3+4UPTOzkM20TfSH9SW6Bhvnd8EtTLLsjDzzez1gP1ECrtZTiooO5U\nEffWWcoju41SFoeKMr9RgOBK+PRndZqc92JtY+AF+hrvkLD4UsAGmqms4Xvj\nEyCqftrTSHlca739ETVtEfsa20hOj8z1DW59SujaKr8UubwxiYN0NMSiMfGY\n6Ur3VcST+qag2NbueNDd23Y7eTOibTPJ+NknY0Da3bB7zfTV9oIxsAXvLkh0\nDgRu0hyG3/Dg+yF1RZ5pI7IWTMYQjIJrNrHd5C7bYVaOME59YKH0XQQ6KiqN\ncKMCGdJzpq/YjqTtHrgSSjdEZQUhS4/6y7nJGxQmybAeJLuBuUdEsNAyH9MP\npQlpx1nTA7lDvm1BO0XsqNODIzJrIlYGf8cidRgPJ47CIMPf1bPt3wVX8HAQ\nU+lEseMnzsAuHQgNSaQxJDyzFrskgAhI09gVobMQ4P9rm7+HHwwxm67Ggw/9\nKZ+y\r\n=zLkq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDSvtSqxN+dWm5IDyOoH1LGEN2WWow3CmKS2Wdiqf4wRAiBI0mU+DLeUtBrXZuXsllkG8BiIucf4Qc7wcVULDt99Qg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.5_1629992624675_0.0960485501794206"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.6":{"name":"ipfs","version":"0.58.3-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.6+100f54f5","ipfs-core":"^0.10.5-rc.6+100f54f5","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.6+100f54f5","ipfs-client":"^0.6.4-rc.6+100f54f5","ipfs-core-types":"^0.7.1-rc.29+100f54f5","ipfs-http-client":"^52.0.3-rc.6+100f54f5","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"100f54f5b6e29ff64d9afb9c2c326707c5097cb5","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.6","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-l8qGq1HeJh/asAD4DmVk4b46pGtvC8QacbykWqX+WLs/O7YyOSDAjcdWugfk7HzFwP2eP8HGjpIg18GMDfcdjA==","shasum":"d395c2ffd8472585a51b0da3cd0e372b1c7e6f7a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.6.tgz","fileCount":9,"unpackedSize":1722442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLjAcCRA9TVsSAnZWagAA7vMP/0GEFZk6TMecMWEIT00Y\nRukqAothEjJ8QsXZ6XgbAgqMjF2efSm2aBldHcTwVmQG38C15a5oFp8dbz+k\n9ZFO1Y1RB0KldW+wqXKGaEOP+1y/SY7Z3tpACPtrY7tWBuYw5QJ7duJslBJg\ntBofycWJUSNgOu4K5T3x+4/sK2heHrfht3Lbqcd1Gj0qEGmx6pMB8+l5U858\nwHKYigIewC6dE4PULjJk8eSLtNH/cG+KbHV+TKEC+kPkh8MEHi17+/y2Io0g\nMf40Fph87joRyK0TuBNdkjf9z/FkYukOQMlpAeR2O/AdP1rwsUvNu7N097gl\nUNUx1pIZVwlOmjfNkuSxSTxRe/Ku24MtH7sTVbU8HTUeFfSi66TZbKk853gH\nNviFs9b+EtjfBmIwxFX9Pdnuxe3eGDEJf0Mz4aN/P23EUdhdRxcf12AbJLfI\nWpd4EOOpvvwMJee+DVxBhqSmnASCV+Izi+gg6LYqAfzok9BbbaGr5pYYtDpO\nrmLr6bfI/qAPokXquzuZqxLsdqxJNDxJg3FDasd0UO4hqV+Clw9nC2RLDPiJ\nuMVEhR+rQ3BgIJPP4b+nKyQRFk5t2MquegC/gPk3wI1V5Dk23ZBi/1K3Rt2j\niBHUjsOzMOmg6PgtsSn6PNdzu8mp+GWyuuppeal9rcou2bRG9cRn/hJXw77m\n1+j8\r\n=NulU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOtRrCMhJv8gAu7s0XoUT4PdRsYCHtfWAypZLx9QGxyQIgWVapMZ9qlcQgvFroJi9g4ZfTshHxitDjD/H2zxpd8fQ="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.6_1630416924558_0.16674216192760105"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.7":{"name":"ipfs","version":"0.58.3-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.7+be900895","ipfs-core":"^0.10.5-rc.7+be900895","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.7+be900895","ipfs-client":"^0.6.4-rc.7+be900895","ipfs-core-types":"^0.7.1-rc.30+be900895","ipfs-http-client":"^52.0.3-rc.7+be900895","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"be90089554b3ff3d7adb02e76076e5cfa1d82572","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.7","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-dZymZfPRnJTpqlO75ks654tzoyFZhoKOsvCR8I1BHaeAIathc+wH/wqCt525rmj+yJ4eX05miDBZIp9h1Y27BQ==","shasum":"d739d63716c30e2643d879c50a5c2afc1eabd726","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.7.tgz","fileCount":9,"unpackedSize":1721130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMOcLCRA9TVsSAnZWagAALr0QAKRbjsttEVmXxai2P9yD\neQcdg6AMuAhSJ8agv0hcNu9FyUmFd2Y680hDaFMPxXDJEvRa5zV+U029WPTH\n4vy++lqQDWOhKWBYZc0TrPqaCkyjir2Zu1YK1HocXrQEeew0xjWEfErcZSnK\nBN+AwoPE3h7LCclEhbyAecPWZvjoPXpNHH5mw9xsZXfobRttLqe6c+Y8vcer\naBVmZQdEo/sHYCEaRWIYWLPL6irbOkYKYJMtFU5T/kDzkzIpBDFWDrBOVrZ+\nrS4o+OzhyrBwN972uLu+3FWiuIRJDfjP5AhrdroHYynMsdaWOR5iKd9h9rw9\nWO2/8sAUkZixEqPgTHdednHDOJENKq5eDTS0+cefSm1lJi12RNx9kfV0bbpc\nU9gvXa6Fc4Z9VlcKBwrcO2ZyIpqoU1SXpCxaZ2J7mbN8ZeNqZBb2BFjxKHFA\nd4L1qW+GTIz4sW9jfTRdgXcnlkTpFy5rLubl0f6kVo7OE2pnwL6e395z0dmO\nbpU+5v+3r9yBnFOp7gLVNFhFg3TYnP1psKSTKn/dxXX03kr9usf0JeFfJE2q\njcC30O/VDGPYIwUN8UJzDtzzn7b8gdPZDLly7FbUeh8IJ0fE7dA7dAUsW0Hl\noHnc1xkEUGkL8NZy3LlYQfN0ZI2Hry2m1b/5fpIcylMpTs/67VI5+qF27MIi\n8FWW\r\n=c5mm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs2p4yQj5cYORL63Y/uRLAdj9gN17tCP7lnrkEWBCQcgIhAJo7lnk+O/gaARK+TUSPLVe+4WXAfnHdo73h8u5AVWXH"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.7_1630594827652_0.8091683082656997"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3-rc.8":{"name":"ipfs","version":"0.58.3-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5-rc.8+c4f96fac","ipfs-core":"^0.10.5-rc.8+c4f96fac","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.2","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2-rc.8+c4f96fac","ipfs-client":"^0.6.4-rc.8+c4f96fac","ipfs-core-types":"^0.7.1-rc.31+c4f96fac","ipfs-http-client":"^52.0.3-rc.8+c4f96fac","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c4f96faca331a2e0db2d6de35a804bf2b9457c80","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.3-rc.8","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-/Ho6p9WhWME96ROD1Q6a/bpaVwhixP4HLAs+lwEOugy7CLeJ9XUuSo2xA+mE2NWYcIYDbgIX7O4s05HiBc8hXQ==","shasum":"ae97a58f1ac45089a7511216ad2acd5d310e00fd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3-rc.8.tgz","fileCount":9,"unpackedSize":1721563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMQxMCRA9TVsSAnZWagAAXtYP+waEhPOtppZ0YRJ4a4w1\nr8VEf/h5VXPpN5BF9CK8TBCZsjOGOwjXSjjuo+XzRmvxveVH36HyXcNsjROx\nl3WC382Dz0LZlVc1SGpRe8RUxpJAVpbGhlJEmNuzMdgzfmHI4dZEw7Am5yHN\nvxBwWpjJtMalPFyQ6LbDkFvYE2TQAFE8kTcfs3/VFXnYgU2J/QK90ugt31k9\n81sbBamiCIWc3w2clRmiEH9xtCbDqX+DPNJ20X3g1E50ps0YNYcGBPjo26AR\n3XYc8ahqL4If48qPvnVRShE6m0thWecAsSntsEdMvU9cPbtJMFuILdI0c5s9\nkOgcKPhDdp7KOdtnqPat6ogh6LsHgwRuGZYkdejn7XmROZKBn3k8kUoghS4m\nteGZuf5xqHjXvObn8pclLROuH4hYQ7xFDbNsPMrn8xdT0mW2fZAPrn36ENoq\nMXmc3OISwM2oFxV9H2Uq6iMhs9S5jp0dLbHrqxvgIMeDPWVartab8POBf+gh\nGkIpPuY+Uf+8aCDTL6zVZut42QoGfIiAQxSHiVi97fnaYbWac208LcC2Ront\nKJvQXnXlTBgiJBh8AzKjzXdL0yFASBeE5qDRhbZh9hy4s85TQYWRIAEBmo4u\np3OYpGszvr8O9qAe6j4by4zwuGs71i/RZBvNgtNZaaNkOPFWiPyltIhfUAeX\n9a+9\r\n=y9Ve\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByklIf58G45x2CttJ2AjkP4/o+17+vmeBa5/5LLC/MFAiAmDL6KtUFne3bzi8VtaSfTbFVeCVxA+VLmMx+cfqC49g=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3-rc.8_1630604364526_0.1531282726050902"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.3":{"name":"ipfs","version":"0.58.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.5","ipfs-core":"^0.10.5","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2","ipfs-client":"^0.6.4","ipfs-core-types":"^0.7.1","ipfs-http-client":"^52.0.3","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"9d92e8079694dfbc7be262021cb9d41e6c5e2c07","_id":"ipfs@0.58.3","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-GXnT59PSyDL/JaVgKwVOUAGmQUZpRARx1wcrfAvBqNWlM8Ph4tlIk9IcNhEgSC2QJsxGtJLFmYz42arrBzpnlw==","shasum":"8b19e0217fa6fbcc27cd360d1a3a7dd4dbf941de","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.3.tgz","fileCount":9,"unpackedSize":1709548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMRYSCRA9TVsSAnZWagAATwMQAJcLnFRO9eZAB4hkTQIm\nRibE4wJCOuaNHp8/lqcSgE0oWZEkNXzWiLTYXaWRt/dnKOnJIXa10nShx9WZ\nkoV7m73BoGsi2aBnhVV44y65+bQ6w33qMWeDJ7bhKXw/lFG4CMp3wS97DRej\nriCfPFy3vbyiJ0KOsP7z/lvTJPIKdQadniLNMHpOQ3oT4qAC9L6OHBmAx1pw\n7m49ZGHWynlXHDj9TbFdQsGb8yj3ROzIQsu4PfVnqnM2apbIsUvh+374qOq9\nOFJOJI3P5wQM/Nr7+y9P855RSRGhIXi4HLa+FT9Fb6FaHDBrdTkxT68zATmi\ngBcSC5JES/b+ZS1A6mu5c7QCboHA0y5AJ5m0tJlR+S/4LJmo0s3VXyqNtJyQ\n0p2pMG0t8i6rcYDL4+CuB3MYoQyHykG5TbeHv6wbKcn8ON8oCN15JLa2C/qm\n3HSTGphHznMKNzwzzOOO4CeohHYOP0dFa7kUJC78CUqwQZIc1D7+Qzf0eH4x\nTqtaMtPNkXRUV1KpCO9aPRFNdbsYBsvPuC4310dt37F6VuFK/NC9f6vwktqY\nR0vLKdhMM+JY9CVdUmSDDwHY09LYsk8c14+WRyFBZJaEaDNoroDVJPYUE1zu\n/YzGfupK861ABfrtjdflB3Hr1vwKewzoAyVmy+olnKFBD/QXYPdotDl1/o1H\nIJdn\r\n=kc17\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC69bDQlNPgCBW8yAc+KfQlJLA1x5RwHjmjvSizLqWmtQIgF7ecph/Ey2no3fOGnzZjt1EZel1IMKlJqVtiC3Rzj9M="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.3_1630606866169_0.658890268816364"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.4-rc.1":{"name":"ipfs","version":"0.58.4-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.6-rc.1+5cd78e56","ipfs-core":"^0.10.6-rc.1+5cd78e56","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3-rc.1+5cd78e56","ipfs-client":"^0.6.5-rc.1+5cd78e56","ipfs-core-types":"^0.7.2-rc.1+5cd78e56","ipfs-http-client":"^52.0.4-rc.1+5cd78e56","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5cd78e56b8344b3f71fc7c578c4a50d92c25f0e8","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.4-rc.1","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-LyCVneey/kcwOsekEC40nd1DcwQFvVeo/pwxfMaTCNLuwibKVu/rIiNtAjAobsUjBrG2pEOeF0q5N8AjVnZVXQ==","shasum":"c39048c5e093ae10e54f988c21410f1c0e15d1f9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.4-rc.1.tgz","fileCount":9,"unpackedSize":1721286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhNfk/CRA9TVsSAnZWagAAVY0QAIqQZh2vlxLHjujSP0AQ\nScWIynoPqjSV+LGJIb1AJgouHCPVac+03LFTyIKQDcRYiCxM+GGdO3mvDUhJ\nY2PBDQB7lASgfiCOm5ZXDehhAA45aJeOYMVVGgT+zlX0bt2Fe4a3ZeK2/vEW\n9aes0GRG+cY7L/9hodSEuEy0r7wUHpX33h8l+60F8n//2dbDsThSWxl+y7pk\nhb7D1dCMauNSlwI9pEwk0ZonN7YOuHhLxUwiO08HpF0xqr9KG9F+IPgY4fF5\nUywiufw3cyi0gxyQHUiujTyFPGBoctCU22MvzgG1/FsaGrsUM4KX8JtIB8+n\nAW87NQyq+eYsOrkgZuZiMkwxOmdghmIWfqVsHe6UHOzg/mRDqp19g7dZtrfT\nV9wjE7E9JeK8cu4xzu/ZFG1s9V19BehzpVJYD3VEnEG0Z99Re2On6V2Oeuuc\nArSsgaziDRQfp49juV20AcxOrWeS1i/tIb5LaOEd0774p6PSLcIH/addTt41\nPodqGfvrqeo5Tcg1YXqgtygmr699TnOPw4leV/URVjCNpiJ6zwKIXedPNOGe\ntczIgu552zWreycBi3IQCmkwXtnoMYXxiODtBCfIWh3g6Zx0PFnY8/t8+N//\nq36HSEiTzhvsKUPeE2eKN86e6nDOLrAnUGGWuRJrZkl/SG7rBvl76ETv5xJD\nIS3V\r\n=gHwr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSy5Aqwu85zyZfOYGPy6Y61lgY8VexwTay5ojesjyaFQIgBNQPX6zmBQd2LsVpc4bE+nj2UClakmxcc23xGqkForU="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.4-rc.1_1630927166858_0.9835541189363959"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.4-rc.2":{"name":"ipfs","version":"0.58.4-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.6-rc.2+2be33543","ipfs-core":"^0.10.6-rc.2+2be33543","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3-rc.2+2be33543","ipfs-client":"^0.6.5-rc.2+2be33543","ipfs-core-types":"^0.7.2-rc.2+2be33543","ipfs-http-client":"^52.0.4-rc.2+2be33543","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"2be33543a07c14a604fd484a481032dd75fd8235","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.4-rc.2","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (linux)","dist":{"integrity":"sha512-QBbIwaLB60i5wS4Q1wdnYByeecVXWt1eZE5/ZkcY5H7FcSK0jxqBzMLHkhmpfapl0vwbUkObB+FytzlMYEduAA==","shasum":"f738ac4dd8f52c2be16e173c916c1a92c132c0b4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.4-rc.2.tgz","fileCount":9,"unpackedSize":1721286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhNi2HCRA9TVsSAnZWagAASIQP/ApGmQFg4n/4vnuqRft+\nDRWres4wBPANZFpeF2/MSHQO04n5Y4g+PzsW2DgOTdAAXFxVF1illBkiL0wZ\nBM2kk0GcKIWlIPd4KeUXnjfyzhXKzDkVkrndOt8hwsEnwZXGc4mZTC8bifmv\nC8cV4Ajg8ngnu205f6vmNh2xs9fgKh/7/zmcGz0fYBG3q1EaoOiwC6vxH07j\ni1cAIWehmPdU27ka+VcfEOpDQTxcvcU2AJ9Pogug1ev6uf/RaeWVRg9upcn9\nKqdoLj7gx50Ek2IYLwWheuum1nswS7RI8mYLoj9P+VkPb2VzrJGuVpS5qA49\n++VXxSoH7BlIQm68n822fOuEUBZJhUwDcBdBbjzHZ/c4POu9eK/jGm5qxjEe\nefmVcAanxOBhFA8WSHdUVH3QyyJl/AhZh+ewSDtryj6i46hN4KlpkQQ7h0bQ\nNAlO9pkvn3Peliva7CUnicp92sEwDuJoOE8dY+p6ZebfBaqSHQZMzxvWXSjZ\n4SNvbK9kHpXcT8orGvApmZn+YSZ/lUMNIiyk/hWhHw23YTMusuSZa45DKOU4\nkA4Fnd7PRjNV4IZx3yL2U94CLXnqQ18HbXpABGkVjrTAd1kYdL3WCE5yCnH4\n2CGXxTAOZVP5V+1Kby786Ef3jZoiY/VTSHUGShae32mv+FaavvzbYJKpGhi3\nvUyZ\r\n=EhAn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyarRmw1W1Yo3nwodm9KXVcDPERy8krHjZiKe+cu8NiAiEA3r9C3z/Ke9J8PXC78WXrnAFtlusPnxdM+p+7nG3ETK8="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.4-rc.2_1630940550890_0.6046767883509239"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.4-rc.4":{"name":"ipfs","version":"0.58.4-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.6-rc.4+84c772ce","ipfs-core":"^0.10.6-rc.4+84c772ce","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3-rc.4+84c772ce","ipfs-client":"^0.6.5-rc.4+84c772ce","ipfs-core-types":"^0.7.2-rc.4+84c772ce","ipfs-http-client":"^52.0.4-rc.4+84c772ce","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"84c772cecffaf4deaf967c0c4e9d49c3dda73237","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.4-rc.4","_nodeVersion":"16.9.0","_npmVersion":"lerna/4.0.0/node@v16.9.0+x64 (linux)","dist":{"integrity":"sha512-VPsW5MjFTIxWd+rneqGd8cXBtzvTcz5OQwem+CbTNnXt4jHuV2zG4ZcqmKFQLF8sIs95wgMI+W+IfEZgmPmSRA==","shasum":"681f00daadb4d5959dee9f473770cfcc33c113c2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.4-rc.4.tgz","fileCount":9,"unpackedSize":2118964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhN5uQCRA9TVsSAnZWagAAwKoP/2AoXdZL8cUMca8SM0Dc\njJmiCYEAw+xumzxca7PG19ALUVxbq56V5Udq11gpX0RVPSRuyXjqYK/0MY/Y\nBV99Jl5AxHrlTsOeh+LIVHeu5fy/2q6xVpy4mH49Xr3seR+tv4/QV4wowJLi\noi0zhZb9nnW/HschMNVVE6T8FGdTnegtJ/kPZBp3IodX8BuCqU7ArsMfB0/K\n4gfygad8iOmxmLYIu7mpH17ekmE/DrO+szoab76Vurxod3yCfImZ0kM4u8K3\nNnGn5a1Hlj7UFNZqG7TfbyGuqHI0rGhsgai1ZpEPB3bfXUB/ZLqB5UT1of3K\nRVejCnx9w4wPOuiLCN/Ciox+EIuO92OvuQIdahOBdtgvNKtwvldAfPvWWNGq\nNwof4vI6E4D+c0W+9TsQqHiE+D0d+qY+0kbGdblWfDTIT1W58vgXlYxF6mSE\nBI3fuCKyVZbU7XbPS/rWoPSl2rG9JzCMF2kTFYtwPaw9cXa5lEJCEj/fselY\nYAM/0+yz3Sy8coldwL3KXGpa8VZoZXP2SLXt4Vq8G+orRlcB0YljEnISPYu0\nYR2EL0P05KIkmcaFmChp1sczWtmW4VUJYkOiFYWQPab3OTOoq6SVpHZ3ZQik\nN3We5r8QhR43cwbSvHIbZVI7JaGJgmUZObjnCtK8Krv4Uq96Xz/q5qP3w2Um\nl5Sq\r\n=f8eR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzPg4ijqGxuJ6fjoQZPZaS1IBJVJsqWtz6coJI/elqJAiEAyYaFLcAVBFDQ5G79+pWwgvaGzNDAWK29NMabTpb7pu4="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.4-rc.4_1631034255769_0.7770294907644155"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.4-rc.5":{"name":"ipfs","version":"0.58.4-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.6-rc.5+b072ef16","ipfs-core":"^0.10.6-rc.5+b072ef16","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3-rc.5+b072ef16","ipfs-client":"^0.6.5-rc.5+b072ef16","ipfs-core-types":"^0.7.2-rc.5+b072ef16","ipfs-http-client":"^52.0.4-rc.5+b072ef16","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b072ef1635759a3d64e02afd7a6d853a94cc06a5","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.4-rc.5","_nodeVersion":"16.9.0","_npmVersion":"lerna/4.0.0/node@v16.9.0+x64 (linux)","dist":{"integrity":"sha512-siwh3Fw8ZhB6T2rr8whsBZoHnJAStAGDuXElrQtm0xp8+vhgnNBqGsvdRFw1fHN/aLNhtJ5UKsK3DgInw5j9hg==","shasum":"9e5a5b7ffe706c8632337cfdd971c38dbed19e23","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.4-rc.5.tgz","fileCount":9,"unpackedSize":2118964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOIN+CRA9TVsSAnZWagAA1z4P/0qcZVS7+ZgTlr1OuJGr\n6PPY/wW7KM4wY6TfE7RRTGh91BTD4swKY16Gj7nWZDCGM4STvdFIgBfGlfUG\npvgdebFOeuZRygkc/5oWxblgG28A9c3lWLxDuCf/5xMasF2nJuHzSDxbAx/t\n10WSrDj45tyircUAUWjDHsDyVxUDJu6oboyv+x+r75lTC0ggEXYECVGv7LeK\nf2bmHjYE8NIQEJTXrvWFbgLMbUE6SuACe1OnBpe5ATor20iLnlJ+EqRjyHyv\nhui4oUclghGc0imwbzN7pg62MYPVP9lT7k8mQal32puNfK4qrZk1s38a5o7q\nSWGN+mcH13A6szdvmgSwhhoqVDjpfgwK66RBC9+64hD9k9MwDAKSxnNmI10x\naHTUjD4NzPgwLAQ4vDQYn+G8Fl3TIBwtO8DwFzEUk40k2CDWrB5FiWNYVEv9\nWrIANz3rmVdsLXE+Yvt55oPLaIJR8ZFiRZYMVvy55AxaJTia3SGbb9EiIkzC\naHu2cP+4Jky3Yd6Ssfh085RmE3GDNr+54L8FIiFeN9gjMYOV8WmAcq0H/nge\nKUBMBzF+VUE1drPjZ5k3ioO4EEMr9Lu20iLQpI4RXpYP1E53lSArCsZR0cQj\ne7zBrok48voxTuSQ+bNeuFvFDs16idkCtFS7D7t1g8n15waDFXkPBBbryZko\nOp21\r\n=vuzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpO9RrcmBEVsSMsHcRqzsv/4ELbp0STkpb6wzu4WTg8QIgVGYT47lfIybMzVibLQwsuPEQ8nGmYlogxka0io0i4Zo="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.4-rc.5_1631093630381_0.6843121291851608"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.4":{"name":"ipfs","version":"0.58.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.6","ipfs-core":"^0.10.6","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.2","ipfs-client":"^0.6.4","ipfs-core-types":"^0.7.1","ipfs-http-client":"^52.0.3","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7555dc28a904958b375c4037258759061745b3b6","_id":"ipfs@0.58.4","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-pAC1vTF/hwlYi0omOGWYficAIIkjcc4VfE9KiaKQDmdZ4Ri88YP+gEt38RUo6Xbryck3CSztGR29rmmd4rpRmA==","shasum":"a0536365a09d02262b42861ffae1eb4cc9a5e625","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.4.tgz","fileCount":9,"unpackedSize":2118784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOIpZCRA9TVsSAnZWagAA9nMP/iGnIfDMttGrpaTjGZkK\nFUvrNrNPMr66gVp8ymkEq7hF7BJITsp6Ue3e8dAPf83VyeqFwvbDmNU7n7wW\n9tSHjCZPS0RRA0rmHQNTQ8qoHMmxcECAnxjzLmV2ZLIMhMXmoyr7VcHlRauW\n0rvN7jJ1WfVKYtV6IbCfgn7hKsdXHfhrxaRHdq8wnEDjXyWtTGxxc2qRC77l\nBJSsEmb/xvLkfJsFcY+zC28n3JM/07QpsCfftBEx9LDuP6WkJb3vxk4/KCym\n7aE99ZYRlmIns5MB4cZ0BinuiCFscbT/x/OVLq0fzoRZeLoNFBE82mwJR16R\nE9psNSXFPNQZWWMsm4GHwesvmZNjcsMZazyVeuRDO/RDzLt0TE5VhF2Z6X45\nDR9TqVS/sJhz8RhvmCAFl4ggYe/xR8KxCZRrzk/3NY7R4b/vfRa61VtlZfZ2\nwTrV+5x2DzKL9bpaBKgHt+kRxilwe4STa8zpvJq/CCA0vtUunGb1SBGmF3pT\nrABqIM55kkwHYfiknbxLU592sHUSbW8A1RUXxj+evYS9wcDBnCqDNJR0+mj6\nm1swOgVX4UiWr1/jxIlNgI8UMApKluAGPl1apbjHkVRojlqaZwGiLczrl2qX\nK0xNqoikasa78Zg+4qjefvP85iFdXFYT1r6jVmdIGjlWMq+EYlL/kSpwDa9U\ntqnt\r\n=jqnB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH79V1qG7NP2qNMmWDxRwdtaY3UIKj5J0sZzHg94svkLAiEAjgTyTzxLnWCL39roSoyhZJL/3PVwvzLTQ6DCXVp69Rw="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.4_1631095384819_0.2580386955912437"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.5-rc.1":{"name":"ipfs","version":"0.58.5-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test":"echo 'Only interface tests live here'","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","coverage":"nyc --reporter=text --reporter=lcov npm run test:interface:core -- -t node","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.7-rc.1+3a8f1fb7","ipfs-core":"^0.10.7-rc.1+3a8f1fb7","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3-rc.8+3a8f1fb7","ipfs-client":"^0.6.5-rc.8+3a8f1fb7","ipfs-core-types":"^0.7.2-rc.8+3a8f1fb7","ipfs-http-client":"^52.0.4-rc.8+3a8f1fb7","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3a8f1fb75cd49c882d013ebc1ff600a9815f997c","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.5-rc.1","_nodeVersion":"16.9.1","_npmVersion":"lerna/4.0.0/node@v16.9.1+x64 (linux)","dist":{"integrity":"sha512-FMyoufkNP8gdYvNUcnUvYaGDykpq/7kCcj5vrxuXzzsT7xJPoqJ/FeO+DRcTG7RBBg6QxGIohIcwbLS+2Qd85w==","shasum":"cc7ce97cd66151f8431ba6a52be3b52690d3e1ef","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.5-rc.1.tgz","fileCount":9,"unpackedSize":1821258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhQKZZCRA9TVsSAnZWagAAie4P/20aLvmKXVpGdX1P5bQc\ncPLy9kf4IDEbMjUReQHLS1ooRSEFbUbjEII+Vo4cFmUdxo/EAhvOAUsh6FRU\n9PBQ11ZE2hrbzR47eCGmtJY3Axm/zobrvqRfSJfKe8Q7DG5wIA/cpvr7Takn\nLuN44C3vDWpsvXc3QZG1W7FIjSsEzVdtQo5brJJ4sF3rGCbQ7jZZR6CapMvs\nezOgDTYZCU/Olatrz93fRsAYXR/wZPXrs00LJUCnVhCSLK7Z4NRuEGuo26xR\nW+13Xr05CcPlQBAQa5NYvGkuEtgQ3Jt+n3Y4ApJMixwzT0toMOl6b3hCw9f2\nmma1i/0g7SjZhIAiDDQxrxxuZAlyCt2Yecs+YkcLzX0Uu/5MF79c9ZSMrnXy\nC06umXh9z0gTML+fl5DRRVflZbkg0luT9QzXCkIrKJcbwUi16i9Qr7VxP0c1\n+HoshnVgKrtZLGEK8LC/ZdK6UWl4O0cBFtotV3AuGYE1Eom5BDhtT0hre71y\nmyKFQjzYHCd6HzOn2ZIDW48gwsVR6nKNlewvF2WdZUmU7I1t3satCWBlnkws\nGOkfE5yqFDQLLXairAwuhYQaYzw4GHcv4IiucAzWNNACxd6r+0ACd8P3rzMX\nLLSLXyGbdrezRsO87zPAKDqN/u/dXsbCDZKGRpMMve8hn/4Oy6BpVLcBrgNA\ncSY2\r\n=m0hg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNJU7lWcIad4z/z6bIQ5ypMmtcecHeGJyBSdjXy6yyTAiATc3vHjS62+g9MzdrrfbsG0o5PE2uBGLBxciCyciilAw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.5-rc.1_1631626841127_0.5189614853706168"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.5-rc.4":{"name":"ipfs","version":"0.58.5-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.7-rc.4+d4b4fd24","ipfs-core":"^0.10.7-rc.4+d4b4fd24","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3-rc.11+d4b4fd24","ipfs-client":"^0.6.5-rc.11+d4b4fd24","ipfs-core-types":"^0.7.2-rc.11+d4b4fd24","ipfs-http-client":"^52.0.4-rc.11+d4b4fd24","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"d4b4fd24ccb37ba7bf7d587308929bc4843398ba","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.5-rc.4","_nodeVersion":"16.9.1","_npmVersion":"lerna/4.0.0/node@v16.9.1+x64 (linux)","dist":{"integrity":"sha512-FEABQvc120gM9dLIZYkGsC6pN4mRNv4XOYMJ3V6dJKNizy1DWW6apNy1gpUL6mAMFiJIJzc6A8zB6Z2QTj4p6Q==","shasum":"f7758a127a8262f70840eaef1f15ea22c1a2c677","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.5-rc.4.tgz","fileCount":9,"unpackedSize":1821034,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAjYPnVgHyDE2jPtWSp0/j0yPlKZdBqAW6EdWGZSs4DkAiEA3rWQB3ABBaYQcfWe0E9ZQr89I+NHcktcvqsro5QOvjY="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.5-rc.4_1631883065096_0.7090535924757999"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.5":{"name":"ipfs","version":"0.58.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.7","ipfs-core":"^0.10.7","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.3","ipfs-client":"^0.6.5","ipfs-core-types":"^0.7.2","ipfs-http-client":"^52.0.4","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"88c9921362ea5d71f7a3af67d30765c175783b5a","_id":"ipfs@0.58.5","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-j2WusFVKSZQ6w8nZLl02QPCiMe/xq/wgz2+YMHtNEzikpWwYm2CUQPmkWB30hw0OEaAfJ7HFFboABC1e7axApw==","shasum":"37abebd81a565b8475a76ab2eb2b347a54ed2cf7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.5.tgz","fileCount":9,"unpackedSize":1835136,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlqOUQubHSKKL1uCjVxN8g4US1mvOPQttIaJoeOCiL4AiEAg1dNFh1cQaG3Hj2rBs/4VFVajAFZQiXviokz1BLNR/w="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.5_1631885061198_0.31943741945200665"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.6-rc.0":{"name":"ipfs","version":"0.58.6-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.8-rc.0+88c99213","ipfs-core":"^0.10.8-rc.0+88c99213","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.4-rc.0+88c99213","ipfs-client":"^0.6.6-rc.0+88c99213","ipfs-core-types":"^0.7.3-rc.0+88c99213","ipfs-http-client":"^52.0.5-rc.0+88c99213","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"88c9921362ea5d71f7a3af67d30765c175783b5a","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.6-rc.0","_nodeVersion":"16.9.1","_npmVersion":"lerna/4.0.0/node@v16.9.1+x64 (linux)","dist":{"integrity":"sha512-tVUNhpWz5NbFisWKqAyT/hKiBoY/kREDmO6qWICM95qCmQTJCsxRW2V6dSDdRW+EcJFaMAANdi/w/zzWQI/42A==","shasum":"2e510f563713f322a59e151c1507e3010877c5fb","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.6-rc.0.tgz","fileCount":9,"unpackedSize":1821030,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSHApL39/ZFszP+8FGXXfVJkIBo8HlrIvXJI2DUEUWQwIgD0oFTpp0f2MPRBRbqz2Pam/2Zz73RCcOedaqBcm71N4="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.6-rc.0_1631885424577_0.41025154301875144"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.0":{"name":"ipfs","version":"0.58.7-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.0+a49a89dc","ipfs-core":"^0.10.9-rc.0+a49a89dc","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.0+a49a89dc","ipfs-client":"^0.6.7-rc.0+a49a89dc","ipfs-core-types":"^0.7.4-rc.0+a49a89dc","ipfs-http-client":"^52.0.6-rc.0+a49a89dc","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"a49a89dca7d9b81d390af0833bcee2133959d1de","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.0","_nodeVersion":"16.9.1","_npmVersion":"lerna/4.0.0/node@v16.9.1+x64 (linux)","dist":{"integrity":"sha512-0JyJnB7FI7AmhE14zNMzSc1TW81Dcxr7cc3gqRUM5cOd91etxHPKO3QfLo6JRJWFmKZyrzNtI+e5KBr2tArC4g==","shasum":"1763c6a1f865fb96d8f915a5efc80850494dac36","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.0.tgz","fileCount":9,"unpackedSize":1821152,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDIH0wWZMYJ/TNYkCM9ulaxpn3WY9vEA00HjvQ8bVIDDAiAIR4yRTZD4gu7gWbIPgFT43Zx+EJa0oqChugj3WyfWkw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.0_1631895944236_0.4867528499310505"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.6":{"name":"ipfs","version":"0.58.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.8","ipfs-core":"^0.10.8","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.4","ipfs-client":"^0.6.6","ipfs-core-types":"^0.7.3","ipfs-http-client":"^52.0.5","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b5488cb3ef5ab7ea24b8b2275ffa8cfa4b7b7ed1","_id":"ipfs@0.58.6","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-/LH4lbO7xs3Ent82XwR+Ud3eq8ozx/5xqjnApANOcOKfvjSISEHNf+p3zzhpir6i5nXwNhyCd27gJCKsdDEsYw==","shasum":"ae558c3735cd1fbed549641528d4e4e876dc52e1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.6.tgz","fileCount":9,"unpackedSize":1820972,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGDraV6yIF41I/KpFwhY746hBqxNCxSXq1S5OvkrxDwrAiEAxhZxFyRJBj8f9iHnDuIGbDPBNndTgJ8FCrKebQnfIk4="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.6_1631896582129_0.6398278848057564"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.1":{"name":"ipfs","version":"0.58.7-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"src/index.js","types":"dist/src/index.d.ts","bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD IPFS_JS_HTTP_MODULE=$PWD/../ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.1+4126a5a3","ipfs-core":"^0.10.9-rc.1+4126a5a3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.0.3","assert":"^2.0.0","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.1+4126a5a3","ipfs-client":"^0.6.7-rc.1+4126a5a3","ipfs-core-types":"^0.7.4-rc.1+4126a5a3","ipfs-http-client":"^52.0.6-rc.1+4126a5a3","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"go-ipfs":false},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4126a5a38bd7b42e96171b67e9cbcbf4efb94476","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.1","_nodeVersion":"16.9.1","_npmVersion":"lerna/4.0.0/node@v16.9.1+x64 (linux)","dist":{"integrity":"sha512-84+9NNu6kJBNeiYgxUTu4RgLYY/S1THm9/vkm+foVQeY44RpXPdHW2CKwmQx1Sl51CHB5Wz80sLx9ku4htMYHw==","shasum":"57b27152cc8713908c98a33ff072c86359860c53","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.1.tgz","fileCount":9,"unpackedSize":1822041,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1LgYJOoEdzKwtmC2DtG95EAnq4k97gKTX2BjqQzUfMAiEA7gIrSLa2bMLdj8y3BF97Zurm3x55JduWo1xZi+Ex0Gc="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.1_1632240658383_0.23740798019172327"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.12":{"name":"ipfs","version":"0.58.7-rc.12","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.12+98e3c7213","ipfs-core":"^0.10.9-rc.12+98e3c7213","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.12+98e3c7213","ipfs-client":"^0.6.7-rc.12+98e3c7213","ipfs-core-types":"^0.7.4-rc.12+98e3c7213","ipfs-http-client":"^52.0.6-rc.12+98e3c7213","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"98e3c72136abd56bb6e3a8ee1421f7dcc8c8533c","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.12","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-4uQ9U49RlAgJcP2oLhamyYgsadZZN+AOv08kdtrIPRTxy8BIukRTkbIdZc309dDjkHCcBWbE4EwooAgPKxqjSQ==","shasum":"ed6bc9526a01b67b7bb47bd835d0b948cb87e548","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.12.tgz","fileCount":19,"unpackedSize":1829067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+tWaGTzgZy1WfeHmxnUtjh/3SpFU7FiZVe+QzGudPVAiAnfkg4ytxOwzI6TUsWmkk8Sf1dzGYhayOPUdCB8TExkg=="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.12_1632377930591_0.6646022573405623"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.14":{"name":"ipfs","version":"0.58.7-rc.14","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.14+498d9b0f","ipfs-core":"^0.10.9-rc.14+498d9b0f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.14+498d9b0f","ipfs-client":"^0.6.7-rc.14+498d9b0f","ipfs-core-types":"^0.7.4-rc.14+498d9b0f","ipfs-http-client":"^52.0.6-rc.14+498d9b0f","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"498d9b0f3c5325af2d2f93ce1538c65f7c1eb2dd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.14","_nodeVersion":"16.9.1","_npmVersion":"lerna/4.0.0/node@v16.9.1+x64 (linux)","dist":{"integrity":"sha512-kvBsiKNIvqzZXDL9Ikkmkqdm6OBo/WxANkMH8MfqnyYx0oLqwnl6OmqTDjp6MrPTw3Fcr70/WMo2FqdS7QgRlg==","shasum":"8c8daa4c9517e4510dbcbc0ad42505a16fb2f55e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.14.tgz","fileCount":23,"unpackedSize":1832534,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDk9fd6nePfo6aeTTOUi1w0tP5socpD7/mGA5GI0nU/yAIgdN1H4s6jZdHVPgn0/5PTNBZPsFuW+tR/85kdFWWZalw="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.14_1632394084146_0.9965016567793332"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.15":{"name":"ipfs","version":"0.58.7-rc.15","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.15+5de1b13b","ipfs-core":"^0.10.9-rc.15+5de1b13b","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.15+5de1b13b","ipfs-client":"^0.6.7-rc.15+5de1b13b","ipfs-core-types":"^0.7.4-rc.15+5de1b13b","ipfs-http-client":"^52.0.6-rc.15+5de1b13b","ipfs-interop":"^6.0.1","ipfs-utils":"^8.1.4","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5de1b13bb685405ae081a824dd76e34228724451","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.15","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-psNC8hpBcHONlbJK0fa0ZkF4bofIK1Urcv/Y4qpDW2B2QLZ3elme8ftZiVpt3Cl3nkEeX1+vc9Dhz8wv0nWYHg==","shasum":"bfc0a6e469c129335bb162327e1d9bfac0100709","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.15.tgz","fileCount":23,"unpackedSize":1831291,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7UvSuyCxTCzpyqGi9YDE1tui8rYo18R1c48+Z22S2bAiEA8Ic5F1n44XumaXWVqxzpWxJpuJ0y7f7sZ361E5B9CMs="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.15_1632401821864_0.3909673899162036"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.16":{"name":"ipfs","version":"0.58.7-rc.16","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.16+be4a5428","ipfs-core":"^0.10.9-rc.16+be4a5428","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.16+be4a5428","ipfs-client":"^0.6.7-rc.16+be4a5428","ipfs-core-types":"^0.7.4-rc.16+be4a5428","ipfs-http-client":"^52.0.6-rc.16+be4a5428","ipfs-interop":"github:ipfs/interop#chore/update-globsource","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"be4a5428ebc4b05a2edd9a91bf9df6416c1a8c2b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.16","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-Q4gz5ryfpm+Ffrl2m8uL/NQenQJcYeCvw8RH2FSj3WA/8RglD4hsp/ybSTWY8wZEwqY4QbNfhohXgj81nf3a/A==","shasum":"74d6a090a97c8943742eaf6323fdca310941d952","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.16.tgz","fileCount":23,"unpackedSize":1818849,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbSjIWfGmbJD0O17dKDTvoBa4jwlfNboHNwG2oAR/l5AIhAJ2TI3pMkayI5H3M6BSS/Y7d0h6NZ3XPcOMYlfXfqRCe"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.16_1632422006961_0.18771929667715925"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.17":{"name":"ipfs","version":"0.58.7-rc.17","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.17+b0f367d6","ipfs-core":"^0.10.9-rc.17+b0f367d6","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.17+b0f367d6","ipfs-client":"^0.6.7-rc.17+b0f367d6","ipfs-core-types":"^0.7.4-rc.17+b0f367d6","ipfs-http-client":"^52.0.6-rc.17+b0f367d6","ipfs-interop":"github:ipfs/interop#chore/update-globsource","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b0f367d666aceb4ea8bdd532a9d8c3501f8cc78d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.17","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-EuDrclcJhmkq7EFdmT4qYLLorE6Fh4m8Y7t53LbS03ejJ7OtuO+5p1JRyrq+Dpv8iU+On6BsZKUQjZ/4HW/ZUw==","shasum":"31d929cb6857c256b6bc67f0ea440082054c0adc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.17.tgz","fileCount":23,"unpackedSize":1818973,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbw2HijiG9KQ2z54z/4Bwsr1Lp/LKaW0Cu8LCmcX5LugIgawFY0t/xd2pJ4wCIacUnRC/KO1NKWnAldTfByMNTxgc="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.17_1632482455062_0.6351688632010746"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.58.7-rc.18":{"name":"ipfs","version":"0.58.7-rc.18","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.8.9-rc.18+938a7d72","ipfs-core":"^0.10.9-rc.18+938a7d72","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.150.5-rc.18+938a7d72","ipfs-client":"^0.6.7-rc.18+938a7d72","ipfs-core-types":"^0.7.4-rc.18+938a7d72","ipfs-http-client":"^52.0.6-rc.18+938a7d72","ipfs-interop":"github:ipfs/interop#chore/update-globsource","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"938a7d72896bf5e5afb2ce6d472aec4fa4929a3d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.58.7-rc.18","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-7Ew69ZojFBBfmY7afGQY4t9c4ipsBm75jx1qjVRe7YW8G4dR+yImhZopTFyY6NDOhLd9eqyQsB+13RFY7qGGEQ==","shasum":"b34ca4b640c382bba6a0af4d0b83c210eb5aa3ea","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.58.7-rc.18.tgz","fileCount":27,"unpackedSize":1819294,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8ei9uzTY8oQsNDK+UqKn/6c52LwmO0TLrUbVAN1QaeAIgWjGd0Vt0h/uFdrlIsZYk60v0TltoYYr5XDSQm0CceGg="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.58.7-rc.18_1632487544684_0.6152950783348412"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.0":{"name":"ipfs","version":"0.59.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.0","ipfs-core":"^0.11.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.0","ipfs-client":"^0.7.0","ipfs-core-types":"^0.8.0","ipfs-http-client":"^53.0.0","ipfs-interop":"github:ipfs/interop#chore/update-globsource","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"cbd3e948deb5a6489cd69d1705a0261860c2ea22","_id":"ipfs@0.59.0","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-od7DTtzuK15A8WsVV+qsG5eDoT7jt8iQhaGZCuA56Rot+vhs/UnXKqIwr4e+T7L9bRfdU1DLvwa3CBtL1D04YA==","shasum":"d53e0f1a67cff892cb2b97220a687bb5ab7e1ac4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.0.tgz","fileCount":27,"unpackedSize":1850471,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb2JG1z4jbDTlDIHlQ45OrRafwhifZjR8giRF37VG69gIgf0dtk0qdWroPGDXVvUCDOxbJg+3LnCL7XO64BcPoo6U="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.0_1632487880582_0.8492070506297156"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.1-rc.0":{"name":"ipfs","version":"0.59.1-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.1-rc.0+cbd3e948","ipfs-core":"^0.11.1-rc.0+cbd3e948","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.1-rc.0+cbd3e948","ipfs-client":"^0.7.1-rc.0+cbd3e948","ipfs-core-types":"^0.8.1-rc.0+cbd3e948","ipfs-http-client":"^53.0.1-rc.0+cbd3e948","ipfs-interop":"github:ipfs/interop#chore/update-globsource","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"cbd3e948deb5a6489cd69d1705a0261860c2ea22","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.1-rc.0","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-tce48jlmg2hnTXPY5DH6aeyvri/z9NzB5mIGNoOdfjQynsDNDBH8NYMHD9+8VyvDTP+w8VvsVO7Ob1eeBC7d3Q==","shasum":"536804194833a5efd9ad4cdf3b0c4649c2e3cb5e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.1-rc.0.tgz","fileCount":27,"unpackedSize":1819283,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAzfGO0WbeHSU6owljab9mQyGwUZPAKn5x5CUqIDIT1AiEArY9u04yeHUy2FmqUNhl5kIyXvSwAjZqRojUU8sPtmW0="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.1-rc.0_1632488028120_0.8455042405978321"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.1-rc.1":{"name":"ipfs","version":"0.59.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.1-rc.1+a0e36f40","ipfs-core":"^0.11.1-rc.1+a0e36f40","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.1-rc.1+a0e36f40","ipfs-client":"^0.7.1-rc.1+a0e36f40","ipfs-core-types":"^0.8.1-rc.1+a0e36f40","ipfs-http-client":"^53.0.1-rc.1+a0e36f40","ipfs-interop":"^7.0.0","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"a0e36f408135c963d4fe3a66ccbe94e60ae5d8c7","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.1-rc.1","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-2zsZbCu5rOhTNcaC4jAVdEyaikbyFGf8ydRXPSzMEfj28TwvsmLteJ+3hM9nCsfxkJAvJwXoCF87PzybgJo5/A==","shasum":"5bbb383673fec90a94827cd18d092f959dbbd4bf","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.1-rc.1.tgz","fileCount":27,"unpackedSize":1814318,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFIjrSSMFnf3utIsJbGo3k5Y6lGqchU+s+l+I8aycoxcAiEAu5bLEn70QTHlHDIOh0j5RQylbxvGka+s4qaMDibiqNs="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.1-rc.1_1632590781749_0.6287293577472388"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.1-rc.2":{"name":"ipfs","version":"0.59.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.1-rc.2+78060914","ipfs-core":"^0.11.1-rc.2+78060914","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.1-rc.2+78060914","ipfs-client":"^0.7.1-rc.2+78060914","ipfs-core-types":"^0.8.1-rc.2+78060914","ipfs-http-client":"^53.0.1-rc.2+78060914","ipfs-interop":"^7.0.0","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"78060914410f54f443aad4c5c0de39f899ec6f40","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.1-rc.2","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-bhas7g5gVciADua1OgzDoDc0y/1//9t1DVJdlioElz3Ugm9C5Htu2oaj4hS27HEoa0qVDwQyGOpbgdiRDUDbmA==","shasum":"181fd49aa17a4975c08203310fe01ebfa2e1e4bd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.1-rc.2.tgz","fileCount":27,"unpackedSize":1814318,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+z6qSQJjn5OzWwwwHiy6KwHGCIiH110MmPOY0mJsA9AiEAo842AEdVJA+hD/WzS9i39uVVoaYrhM5v7A6J9nI5/UA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.1-rc.2_1632593479784_0.9356684900013545"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.1-rc.3":{"name":"ipfs","version":"0.59.1-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.1-rc.3+7cb98616","ipfs-core":"^0.11.1-rc.3+7cb98616","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.0","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.1-rc.3+7cb98616","ipfs-client":"^0.7.1-rc.3+7cb98616","ipfs-core-types":"^0.8.1-rc.3+7cb98616","ipfs-http-client":"^53.0.1-rc.3+7cb98616","ipfs-interop":"^7.0.0","ipfs-utils":"^9.0.1","ipfsd-ctl":"^10.0.3","iso-url":"^1.0.0","libp2p-webrtc-star":"^0.23.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7cb986167d2e51ab0ce94104bac92ec63c0a7cff","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.1-rc.3","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-yAfxvg3f9xCzy7cA1rEMvooOM9OkYQb0KRK2kE9t+Bf9NW7ZMFuV7U509YSon/JvgZP4/NthqWsQIxM4jeyb1A==","shasum":"abb176fafa91abc037c42c8d7f9ac334bd0a9bf9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.1-rc.3.tgz","fileCount":27,"unpackedSize":1783508,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSr7QuYP47DwkV9mX0Guv6WfNZ/kIjTyBjv0BCUX2VywIhAIFhEIsZdVsK/J5R43OzGBpU5g45f0w/hRMqiSeScjyr"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.1-rc.3_1632760658761_0.6727372958720803"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.1-rc.5":{"name":"ipfs","version":"0.59.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.1-rc.5+4dd8acf4","ipfs-core":"^0.11.1-rc.5+4dd8acf4","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.1-rc.5+4dd8acf4","ipfs-client":"^0.7.1-rc.5+4dd8acf4","ipfs-core-types":"^0.8.1-rc.5+4dd8acf4","ipfs-http-client":"^53.0.1-rc.5+4dd8acf4","ipfs-interop":"^7.0.1","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4dd8acf4d7df0ece0afa764d44dbdfbf788807e2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.1-rc.5","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-6IP9lLiothZR5lR0FrlVSKwBrCswtpyr4P84UBZj3FhUfFr0ww9s5Xe/2OQ8OtuxfQu7/JwEQenM4wm5vcwOiQ==","shasum":"187eac2bc2513940576b3e88a6747f2d0777cf3b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.1-rc.5.tgz","fileCount":27,"unpackedSize":1782785,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUr2b3WYL6O9PUfRZj86aEZCw9lI6IeY7Kw1pf9rfgVAiAx8MKOnkcPEVb6UxoQiL6d/cEI//9f1/Fr9MvDNpGylg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.1-rc.5_1632830424434_0.03420516834297205"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.1":{"name":"ipfs","version":"0.59.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.1","ipfs-core":"^0.11.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.1","ipfs-client":"^0.7.1","ipfs-core-types":"^0.8.1","ipfs-http-client":"^53.0.1","ipfs-interop":"^7.0.1","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5ddd0c555cc6577ee15667f4ef4e7f3a3b17d04c","_id":"ipfs@0.59.1","_nodeVersion":"16.8.0","_npmVersion":"lerna/4.0.0/node@v16.8.0+x64 (darwin)","dist":{"integrity":"sha512-soacnXWI7D9lQ2IaJU0cvwSjVaXKux3ZqtkM9uaBqFbw3bSI03eDk9TXR8U4GPacBTHixY+4I7HmzzGIXn0anA==","shasum":"fac8ca6e0d043520bbf9138a68621f702a6dac13","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.1.tgz","fileCount":29,"unpackedSize":1787639,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnBlg5HbNYQyUB16a35OqD0d6YeJWoHVJzNx0iC3FSJgIgHWwZM+AYL3owXkPUuNxoYUTpFAw6ED0q7W+bP2CapM8="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.1_1632830727942_0.38793543509454875"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.0":{"name":"ipfs","version":"0.59.2-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.0+5ddd0c55","ipfs-core":"^0.11.2-rc.0+5ddd0c55","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.0+5ddd0c55","ipfs-client":"^0.7.2-rc.0+5ddd0c55","ipfs-core-types":"^0.8.2-rc.0+5ddd0c55","ipfs-http-client":"^53.0.2-rc.0+5ddd0c55","ipfs-interop":"^7.0.1","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5ddd0c555cc6577ee15667f4ef4e7f3a3b17d04c","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.0","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-H4/TO+SwLamDnLE5taUAlQUJM7dclc6IKkA0ZdhfUicTxhR35/lUt6GSE61DaSQKa1foqapfP/D449q28nC4Ww==","shasum":"53e063ce30c9dae6d117b5057daa62bf0bf9b2af","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.0.tgz","fileCount":27,"unpackedSize":1782785,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCujDKzam0p3E+6oQF2qBSAD+CA5ulRG4CIfTU6IJKS7wIgTfg12P2MtjT6Df4UVLxpgDipiMD69oZBStvDCDMAXSI="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.0_1632830871875_0.6898842739045916"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.1":{"name":"ipfs","version":"0.59.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.1+3ce2f769","ipfs-core":"^0.11.2-rc.1+3ce2f769","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.1+3ce2f769","ipfs-client":"^0.7.2-rc.1+3ce2f769","ipfs-core-types":"^0.8.2-rc.1+3ce2f769","ipfs-http-client":"^53.0.2-rc.1+3ce2f769","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"3ce2f7693b59ad4176e245c4c7e75a91dd1bf94f","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.1","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-PuM/ZPHOc6k2xHSJOAfGZ4N8vof3rywAAuG5UdID/gv3Lg/qkjlxybh+uH89qzspjnfwt5BsPPD+Hh4UgkaQPQ==","shasum":"2b1f86486a6829ae8e32185c08daa69c9378f395","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.1.tgz","fileCount":27,"unpackedSize":1786291,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfwJ8jI8+wDQ/EvUcltFuY2HQ06/IdCkAlfNJy7QHZIwIhAJe8vzMNV7d8KiJBE1QDX+Wt4duzIfnAhekV3Lv1pPql"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.1_1633016943025_0.8359025351139506"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.2":{"name":"ipfs","version":"0.59.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.2+b09a18cd","ipfs-core":"^0.11.2-rc.2+b09a18cd","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.2+b09a18cd","ipfs-client":"^0.7.2-rc.2+b09a18cd","ipfs-core-types":"^0.8.2-rc.2+b09a18cd","ipfs-http-client":"^53.0.2-rc.2+b09a18cd","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b09a18cd98883662353d116a8ff25a3ddaa48fc2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.2","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-v0k9J/KGkslqDpI3BXG7kSJ7h22m4p79ygtE+yicWEKakWzgC8Tkrrohmoj88kOkmlv9oZ0mL6hg3mVKB/ghuw==","shasum":"e89050095eebf4c6d3937629bda8d2ab18b53b5c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.2.tgz","fileCount":27,"unpackedSize":1786291,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDcca6vRNjzrVspqmLv9ADzBZWlkvAwEq/bJzF42bPjJAiEA3wY2b0eQu4xPqQZEanv3FBGErNGdyI1TBmg7qx4EbNA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.2_1633023564600_0.9028438757344981"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.3":{"name":"ipfs","version":"0.59.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.3+bb0dd96b","ipfs-core":"^0.11.2-rc.3+bb0dd96b","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.3+bb0dd96b","ipfs-client":"^0.7.2-rc.3+bb0dd96b","ipfs-core-types":"^0.8.2-rc.3+bb0dd96b","ipfs-http-client":"^53.0.2-rc.3+bb0dd96b","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"bb0dd96be3e570f5a43a4f31f43d1c97e8322605","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.3","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-NdAfwXbD3xwxPQSTYDHp6X0jTqDlyiiiDBmsdR57hQ4jXFl/BDTGMXsrNChVvGbapgnWB1tiqo1cnmhFI5DbtA==","shasum":"00a5aff4c89bf72c533fbe64b7abe26f93c891ff","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.3.tgz","fileCount":27,"unpackedSize":1788647,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG3e9R+9WLnqQn38yBK6P3KzfNHknV4xs/faq9aIq/kRAiEAhprrWUVEBzNmoIOgu8HuICLs0DXA/0GqZN7KzrYTWSA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.3_1633179505977_0.3519384198141666"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.4":{"name":"ipfs","version":"0.59.2-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.4+09c7bf7b","ipfs-core":"^0.11.2-rc.4+09c7bf7b","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.4+09c7bf7b","ipfs-client":"^0.7.2-rc.4+09c7bf7b","ipfs-core-types":"^0.8.2-rc.4+09c7bf7b","ipfs-http-client":"^53.0.2-rc.4+09c7bf7b","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"09c7bf7b63620f84d50c8a3983a5d4c28410cd82","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs/js-ipfs/tree/master/examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.4","_nodeVersion":"16.10.0","_npmVersion":"lerna/4.0.0/node@v16.10.0+x64 (linux)","dist":{"integrity":"sha512-iy7mwKJuDuKrLuZr2sFd/MldCjsFQmxSrjrdBIPyePQkEfC71auFKRah/8uQu9Yb4++i7rOQY0Ch0R1SuyNq4g==","shasum":"f8351f11654f102dabb79f6fb698beb41765392b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.4.tgz","fileCount":27,"unpackedSize":1788861,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdKxUYz0aFo87QsxV//cfJnUZc8m+pIjP5pHCsbB8tEQIgD9urzSS79AVKlu9Dyd6fLbYxWJG0VnIb5bP5+vAGHbo="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.4_1633703592148_0.3642776475550138"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.5":{"name":"ipfs","version":"0.59.2-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.5+15184bf1","ipfs-core":"^0.11.2-rc.5+15184bf1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.5+15184bf1","ipfs-client":"^0.7.2-rc.5+15184bf1","ipfs-core-types":"^0.8.2-rc.5+15184bf1","ipfs-http-client":"^53.0.2-rc.5+15184bf1","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"15184bf1838956a44c079660a4d82c24166407db","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.5","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-HouaZAhR6DQln4TrfozlSDsOega6kl5g48QoAtgCW2kP2CUkOu06PxisC/5nEhzcbQt6lZbgNhFjRsK07KbMlg==","shasum":"2e7126effff4df495c03f4167b45356cd8f9aec2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.5.tgz","fileCount":27,"unpackedSize":1801987,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDCnS209mx5XGvaQFKtwMLkH19lVtL7v9GkkSecgJMu9AiEA7Qgp202QN1jqzE54jNE9nJ1TeIB+dtlCyDw0CbaBaRI="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.5_1636010789009_0.9638044432682451"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.59.2-rc.6":{"name":"ipfs","version":"0.59.2-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.9.2-rc.6+8a3ed195","ipfs-core":"^0.11.2-rc.6+8a3ed195","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.151.2-rc.6+8a3ed195","ipfs-client":"^0.7.2-rc.6+8a3ed195","ipfs-core-types":"^0.8.2-rc.6+8a3ed195","ipfs-http-client":"^53.0.2-rc.6+8a3ed195","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"8a3ed19575beaafe5dfd3bce310a548950c148d0","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.59.2-rc.6","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-nDv+grSQt0Z0QcrtUleZ6479JF9mwHQ84AdTX+oF1hsi6rI6iSvBEU+JuIapro4OVJboqJHDZ2amHiQ3wN7tPg==","shasum":"9155e187fe67f569c33ac203b378213ffa233119","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.59.2-rc.6.tgz","fileCount":27,"unpackedSize":1802188,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7e+C2mP5n5EH6nQVJmqMUlP9RnrJ94mwEPTTnhr6magIhANNHTjWAQBw84GdPGtAG7F2rtXRlni1X5WiXwLAoTgOM"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.59.2-rc.6_1636716682392_0.31551583952875806"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.1-rc.0":{"name":"ipfs","version":"0.60.1-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.1-rc.0+568aeadd","ipfs-core":"^0.12.1-rc.0+568aeadd","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.1-rc.0+568aeadd","ipfs-client":"^0.7.3-rc.0+568aeadd","ipfs-core-types":"^0.8.3-rc.0+568aeadd","ipfs-http-client":"^54.0.1-rc.0+568aeadd","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"568aeadd8f308cc230de06a956c1a9e6102094b6","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.1-rc.0","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-9QJ3ZqCozSe0YPyOu4MVKlOVJt1W0lgZbcWDCNOoD6IF0vo+gR/DEjQ8cadf1EJdtkC0jyNZyHhPboJsCQAWRg==","shasum":"221b95a0a823daa4760444160b870bfc134132f4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.1-rc.0.tgz","fileCount":27,"unpackedSize":1802189,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQTRtXsYZDhbyIhAWU37/9QBlb7Dm1mupVN434zC2NyAiEAuaGCq9ZTFn10yfJGLo4t239lhIadQLh2qbu0uCsy9lo="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.1-rc.0_1636718177208_0.3721453382992639"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.0":{"name":"ipfs","version":"0.60.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.0","ipfs-core":"^0.12.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.0","ipfs-client":"^0.7.2","ipfs-core-types":"^0.8.2","ipfs-http-client":"^54.0.0","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"568aeadd8f308cc230de06a956c1a9e6102094b6","_id":"ipfs@0.60.0","_nodeVersion":"16.11.1","_npmVersion":"lerna/4.0.0/node@v16.11.1+x64 (darwin)","dist":{"integrity":"sha512-fj5mH+ZHQZ/fH6tQOxAPNB20KUnQATCZHQCBcQJJXc+MVy6NA8kBhSMHTDlngyAhVhueiyaylrpq3H256WaNVg==","shasum":"6aeb5dada9ff95065cba5154a731ab9d974ca4b7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.0.tgz","fileCount":29,"unpackedSize":1802182,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDMZcQwpgAFUS9iEAH4AAiaTcABrPccE2UP3Sdwx49cIAiEA+ITWgpQRavC5GYn+3x/2iozUuUtNo0zgo4TU4Dzn7CY="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.0_1636718487135_0.35849140478261066"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.1-rc.1":{"name":"ipfs","version":"0.60.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.1-rc.1+f419553b","ipfs-core":"^0.12.1-rc.1+f419553b","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.1-rc.1+f419553b","ipfs-client":"^0.7.3-rc.1+f419553b","ipfs-core-types":"^0.8.3-rc.1+f419553b","ipfs-http-client":"^54.0.1-rc.1+f419553b","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"f419553b9dccc0a1172f399c41b766a754a3ac56","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.1-rc.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-X50NNWs5pMrHqwrNZ81oUA1xnzoVvY7gWptvz6A7JJDQt5EM4/sPwVIKMNy7WoLB/zLih91iYu00IkRwDcIv6Q==","shasum":"a82449714db2b98653aedb63326a89640c3e83b7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.1-rc.1.tgz","fileCount":27,"unpackedSize":1803009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl8XrCRA9TVsSAnZWagAA2DIP/RzYe/lxrbqFUh4cAky/\nLaUiHDj3+6KzckmZY/VlmJRW8TTmplk/aWeA7dNFNlzEhCvti97Pa8WZvtFQ\n34DGuEPg5LYmG9iGzDQA+2fldDYrKypWA2bTOpeypoOq/s5E2Wz8dnV+lXjz\nw85zeKiHCSPCZIfduIjiSbDv9ytiztO51aG6W1RzcWwTtZ1CBG3v88b8Twcm\nwbDMSImghVjpRqCdaB0M1rocDWmwtcnfUkju4CO1TQ56cigiRvCBIwAhG5U7\nI3u/o/DqGr7r7Jaz1FxUaZz0mo/mwNE1n0i/qqXk4ZK+yqs2JDmnNFpFSY2g\nKPgFXQklcFHOxR/vmp8eaI8zNHC89EltpStJOHnTQmyZOERto+sHUGFb0Cd8\nb4AtGpa3po8Jsr9PB99jLp1rw+z8CwneeUdoAETfshdWHJylJOfjWGkT6aCu\n2rNGfBjR4DP/DggYu3xGOcBO8xALWQl37WR0Br2JtLjz/76l5muxhMHqu5bH\nL+BSwtZGvp7Y48wAzMSEIplyQZJrarbBsyptmleGt1qjz1d/++kb7p7J8lbg\nDidx9D1saWQ6ZYR7I3Lly/STXRjsKpE2hKb/7yoInRc9QRfxJ61lT54PFGWr\nyAFsMpKjw/03NzJ8yYnPm5aDhvor5zyJ5lS1dkIA7gDNV67widdYdC1C1Bvw\nITlZ\r\n=bh9C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCizUnhPWnmWuYQToRq49YO41TdkGHonk7h5QB/43qALQIgK3GZ5BbveiVTF8FWmqxosDCg3YsiS9a7a6hXGrqwJVc="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.1-rc.1_1637336554874_0.2828327657204772"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.2-rc.0":{"name":"ipfs","version":"0.60.2-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.2-rc.0+fdc148b5","ipfs-core":"^0.12.2-rc.0+fdc148b5","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.2-rc.0+fdc148b5","ipfs-client":"^0.7.4-rc.0+fdc148b5","ipfs-core-types":"^0.8.4-rc.0+fdc148b5","ipfs-http-client":"^54.0.2-rc.0+fdc148b5","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"fdc148b5c08c0be49eef77a18259d5baa895e3f9","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.2-rc.0","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-mpGNPcVCefIMMo9h1ACWCC6FATQvZQ9foKV7MTiu69qM+yFXDcEi9EL6VIMYwYv/FS4csQyOHSPNQu4eoeeyew==","shasum":"50fcf0672f59fa1356b6e885e1689cb8cd59f1e7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.2-rc.0.tgz","fileCount":27,"unpackedSize":1803009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl8doCRA9TVsSAnZWagAAp9kQAIu8M1YqgphKm8HQt0gq\ntCZKdve5/ut2Md2Xmk1runBUYlE3Du87JWpHOWB39eysRgZW84KwSp/l2twZ\ngiAywzqWBlcXQ31r3aXkcKJNFJ8o+zPJTOCNIg55FM3Sl1whRbLWBgkL15Yo\nVY2HlNaTDGtQVAqKrS2F8pajI4sn4u+A/7F4MlOWkAl/FHVc6TWmJWIixtgC\ngHekmOsAX5ADoxQnuTk/D3McKorcxjUymOzZgfL+YpMsSGVbY7NhZrKcj5qE\nSCUFo5mizMTA/6FxuN+JCcHdGl1XQuzoquoArcKnvLarQipWSWvJnmFjoITd\nXgMkGKr0Ymxnj07WyaGtHw6VuAuqJEdIy/4q9weuuMlTUVJUoUK3bPtWMN9w\nQRvCGp9/Zn7WnVmqH1I7mU3vX5wd4P4wdBTz+/K0rM2mbPorIOD7NNXG+pqr\nvFYIGRsvjbAkpuu3pxyOUfvnCD93cPSIQs03dyboKEq8rmAfJ+pQYXqk13Gk\nuJroyqXHp63eo32ZaiRx06cZKmkGUpitwrep0V/O5aEjNczisJVnyC+J/0x/\nxx4TOq+h4mdafWiNEa3H3GaKsiTJiRzXOfVM3+Azdos+mPiScYcWt0jtpn+f\nUpER4tKbMC4xnmSGvdFKf/kmusWExU76RZD3JYdMQX2sBoBbQVDC49wTqF43\nZUZi\r\n=WSFW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYxqFoinwgVkccHIbMjppmL7wEVhd6K+ZfZg8nLcE/JAiEA3LhyW/nOL4Vz2GVKKBS8erN5ONsBHf2fOpWqYw2Oae8="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.2-rc.0_1637336936363_0.12688791702102686"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.2-rc.1":{"name":"ipfs","version":"0.60.2-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.2-rc.1+041fc29d","ipfs-core":"^0.12.2-rc.1+041fc29d","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.2-rc.1+041fc29d","ipfs-client":"^0.7.4-rc.1+041fc29d","ipfs-core-types":"^0.8.4-rc.1+041fc29d","ipfs-http-client":"^54.0.2-rc.1+041fc29d","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"041fc29d151e8727ce9aaafd2c46a4cd34baa8ce","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.2-rc.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-UHSzGsVF2dSo6BNXpo2l5cpK5u6sPax56GgnyDjIEgzRQiH/sTVABiq6Y1Pa8OQSG5Nr50H1XfcAc5hIJiYokQ==","shasum":"538f8ad66b02f246403451546ec5ff4bbbbf0402","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.2-rc.1.tgz","fileCount":27,"unpackedSize":1803009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl92sCRA9TVsSAnZWagAADaEP/1AM7hBqslfN7ogtRk2C\n87j+rpJWnKsAX/n0UTUHd3ZxRk7sbi0gPlBCJvusd89uUZiwl71euPep3ZWR\nF317AzuWekrjUQZH0q+0Cpm0dfXIs1QsdA2euZ2pfPAdSi2K/th4gHge9QI8\no3jFXc7x+EVTfwKHtCSmhP84gevBTv/x61mhXDRsqwfvuSUBWcU26c6J8U2P\n2FzGyE6Sp3wzJTgOb/zoNsrxYek2Zg3hLd2uvb8/nWWCrN24dtb2jvgFG3rF\nPJ5Azqa2Igm6UDVsXbaq24QLJP07CO0OhwNfP3DvnT8iZrJC63i/DCcqFSRx\nmm91XNX8r8W4HBwh9dcdZiOYEhj8j+obDrbXQAzSs4xYrMhmtNOOnd7A8Vl5\nmWDfwrLMaEkarwv91nfTFx2tEIXOXEVhm5xc0mWmkXa4r/vJflvUvGBMTHDi\nFUDdQeIZkJrLtPZrX3eq+K2Au5Zy4GwZQ3OA+TXDa/T+VcBE3AwUcm9hskkw\njN8/rJNQOqVkFAU61ysN+cRJ0eGPYXOV9wXgAdQY4vnO5khwK2G5/lguXpFo\ns64uueU7M5ufm0RemHzjzuOdkHo7blv/xj4gK5BusCjDaEWndjWpV0xiFmQ8\nM55SWyMR52YNjETCMd9N9leutYe9WpFptwYrYKy7K2+fLKUM2xIGnjPN/a+q\nkgzM\r\n=VtHo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmnfSORSEabR1drdcSZ7NCOlPvkK6NtblzwsqG18IF1AIgQm84R+kdTya4yd+tGMYTeVmWxUpFFwmgpO5/Bhl13hA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.2-rc.1_1637342636474_0.500308562255058"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.2-rc.2":{"name":"ipfs","version":"0.60.2-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.2-rc.2+70c67e27","ipfs-core":"^0.12.2-rc.2+70c67e27","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^35.1.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.2-rc.2+70c67e27","ipfs-client":"^0.7.4-rc.2+70c67e27","ipfs-core-types":"^0.8.4-rc.2+70c67e27","ipfs-http-client":"^54.0.2-rc.2+70c67e27","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"70c67e27d0b82c7650a2a0d7a646afdcd24e73c2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.2-rc.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-L+RTAP20X8zV39CgaPdfCBKwcKeNWjeegatF346AYL2sIBa7/ARPMIF+DBWecRVLvV6d/krAyxY/HEWBsoYxKA==","shasum":"ff8d46ba777867ff215811f15ff8173e4c9835d6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.2-rc.2.tgz","fileCount":27,"unpackedSize":1803009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm8KrCRA9TVsSAnZWagAAwpwP/0cFpHBpti3NI3MLRlIH\nbed7hh1OyfOUwt2gBSa0UZpeaM8Cdaqs2EeiAl59oPTEwLKO4VxH3dpzyyVT\n4y5vSha4hDd638k8oG0yYXNRaDHyjzfpL0/vWLfv/6/g7Pq1hdV+o3VwsdCp\nEd3ZJpjoOLa2oSUhHfgAVbpYXFGYSa4wUwnwFnKX34qFkn/Agc8MaEMQfgiD\nTQIbayeteeyJnc+fQ91IcCRtY05ooCauC1o4GCFonvsyUnTUaYEo0FnHIgiS\nn4/bo8QjQERpCGEXkVQyX4DUTH/XxWN3XMXR9muOckEstCkSLFsA87NONT23\np4oW8lfVGNBRYiRuy5qfbsYm73nXqWgZTHn9EVgsflAuWQes8tF8LLE/5xYw\n6TbExHgiZJJOEGJ+QUX12TtHzCr3luy1xdFIVzISiNdEA8eXMLRjFbuHfYw4\nnjAd16aX4H+XJ07hM00ykiP5R3cCP26KdEJ58p6f2Y+j2RIu+2pPGxxwRzrb\nyA+399mjWaM6imGtbDKR6XW1ncAQwyQSiiOF/fFYbAXxHUT4xpqyaL5fleuA\nv75ZAwzNeLxdg2eVZhuRclc387pjTn8580bGAejhiEZSFkYHo725SAGCteLH\ntZQrTJ4f6unZpvuIt/vYpURo80Ostswqn02m2/grskCsFwCUSj4UxMUzIUzB\n0pa7\r\n=EdlN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFw4CVjYlj+PAYkjf4Jh64cmlxXnhk6/vwNH1aIIg5vmAiAG4YbMaOoP4av0br5pglGPXt5DIlpnGE4IcRb8ogwpVA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.2-rc.2_1637597867254_0.8776743777265437"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.2-rc.3":{"name":"ipfs","version":"0.60.2-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.2-rc.3+484d2559","ipfs-core":"^0.12.2-rc.3+484d2559","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.2-rc.3+484d2559","ipfs-client":"^0.7.4-rc.3+484d2559","ipfs-core-types":"^0.8.4-rc.3+484d2559","ipfs-http-client":"^54.0.2-rc.3+484d2559","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"484d2559cfe120f01eb9c5dc728d1f7cfbd89730","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.2-rc.3","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-ihsIHX6JO/1xSRvwJlS7YMPHQQaPcg8oCFv2iq8gTNNxab0v96yuST7Szrn1COtWMCAWx5z5ze4MbJXw8/PoAQ==","shasum":"71b29644e090014d9a1cefb2f00b934d404b38da","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.2-rc.3.tgz","fileCount":27,"unpackedSize":1802983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhngeOCRA9TVsSAnZWagAAKH8P/0l82qFrgRS41hHdc8Nl\nSLN7qGC7LS+4TmWYlUeJNIzmz+wR+HQA0iUBNd/TqEbsivTkuA4V2Cmr2I3a\nCkht/rst1SuPJANUXdHnxMejFpgbYA1IP84N/y958QlxCSjfg95BFgxmP8Mu\n3hr09CjtOLNAeT+BICxa7kr3nEinVjVPn+PUhZqJc5EGSgE5XgmbUakxRyKl\nJWH0ER+Z7Wt/nQCL0howRDT5oR95Rpvm2cDU0B9WFYOyRd20r19gTSbybuqS\nxxrjSC0QWwgTVk6gpgV0qOppU0Lm0P9Tbc00VH4f7leQTkeHvBG5sqHP3ASz\nR9quDvriCvRSyrIm8rOdSEXtJ4a8fmH58YQTO+JVEGX/asVo37X02USZnVw7\nVAAH+xA7LkSQnwxd5WKyKYypomXLoXV+a+QoeqtEfGkDnYmYb5axSX718bIT\nTwc9cva6j1YZNJAcfiWpqQjB3MOiCn4xLeE9ihAaQITo91cH0WeoQdubqr3+\nYW6HwWrezc1MaWcpwDs/5YiyQOqS0J4I/NexHUwaSS90ChndG6rOpA4bI5eQ\ndI6hmylgG+QDUkZoNt9GPjV9KUfVZD9+A932dZBbi1lO1bucW9sX2nnxzTHm\nv8HJEd+KkVHuZdF9TzmqvaossAocV68hSZ5HTNkyCgW3HW9cf9QyZ888PFMZ\naDoB\r\n=QXWF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFcnyMQbaK2ppm9SJzju96S5AcLAB2z20RzWdoOojcxJAiAYjD6qzT7piT9XCAMAtZGmsedrF0OCWiXAOKiHeMSk+w=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.2-rc.3_1637746574492_0.36062315241969034"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.0":{"name":"ipfs","version":"0.60.3-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.0+6178708a","ipfs-core":"^0.12.3-rc.0+6178708a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.3-rc.0+6178708a","ipfs-client":"^0.7.5-rc.0+6178708a","ipfs-core-types":"^0.8.5-rc.0+6178708a","ipfs-http-client":"^54.0.3-rc.0+6178708a","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6178708aedf5ea86bf537862c08db49f5b8ea20b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.0","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-bAogPzvWsgipCbXg4rklJ2mDu/hxYAM0RvKV7Y/SMOhAVnDY6aYOSc9bQXSkER2A48wOEt/+4xXSwIAAaG7UwA==","shasum":"20c076641733281e09602fc95361fd31e3641a18","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.0.tgz","fileCount":27,"unpackedSize":1802983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhngh0CRA9TVsSAnZWagAAz30QAJZefLYMl5VbMQXrqdVQ\nTFFaQhq+u8QwaaxlpnB74DyEmdGmK6B8X67XgjpLgbm0X3mKrGNoh7cXwGDT\nPh9Buum0eOL22p/N2IV/KuWjEUC+GChtf7Xf0GxBTjc8MaZtmWE3Lun+LcJ5\ncvG9sz06Uk1BgGNrLLojZ0fv6koKVYnYSFydCMBKi/GTp6succpbmMMW79UJ\nz8mf0l7sQik47+Ie3YKZ7f+TM/iqzLbQuZ73671+uGhlDs4WYJWoVBxcJwGQ\njPLmifgSjmVN41sV4Zp/lNiri4WdmLAnruwd9GwwhO7UwUbd34cBINxNMKOC\n8IruzZ5kfkNW3ngml7O+pl2GkncTZfkLVr+W8Dmwy+rX3ODQoPfNOtvAR0wZ\n1gacfWxTPj9fNaNCeFov38g23EpD0pBYK8y692uoMGflxZvkzrwy8P416hmN\nNl/zJHddqpVMHT84aOQkECMNI2W/rQyt5b6+Scto5Jkdh9ALELs9NYh4CKtj\nnPjQUcltVW7hYae+LoiSfYSV9EmmQuHJAw81KNP0d9X/1iw96N6FbUd6RhqM\n0H4AMlJmprvC0RqcXX61EUYxFuTUeSzIvYksY1OFcQdtxkv76SPnij/+DvR3\nMlYZZQXBwmjceIrFfuRpa/8nV4WqnSGN4vVFBgmvIMmppe4xUAD6GMii54va\no2uH\r\n=+1sP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbYhbzKVkXNnEShQcJuPaPJaLL8AlvIZco9KqpSLyv0AiB7arl18VQJ9JGDlY6STBCI2s3lQXAD96eCnIucNmZ68g=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.0_1637746804429_0.7173673119348198"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.2":{"name":"ipfs","version":"0.60.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.2","ipfs-core":"^0.12.2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.2","ipfs-client":"^0.7.4","ipfs-core-types":"^0.8.4","ipfs-http-client":"^54.0.2","ipfs-interop":"^7.0.2","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6178708aedf5ea86bf537862c08db49f5b8ea20b","_id":"ipfs@0.60.2","_nodeVersion":"16.11.1","_npmVersion":"lerna/4.0.0/node@v16.11.1+x64 (darwin)","dist":{"integrity":"sha512-dRLKxtbc/clineZHPSwfXHb7ebVNwsxSAbXCq9vT6TBZl3MGy5eI0fzrUbKUo+9P+I+uL5oTcSaOxIi+Dk8Tqw==","shasum":"5a9d2bd18e68172d5402e84f87ac91e79c1d9bca","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.2.tgz","fileCount":29,"unpackedSize":1802970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhngi+CRA9TVsSAnZWagAAymUP/1e1QWVm6B9I1mY9vlft\nMPFTc7o2GU6k5JVQ3TQMDxagG4oeHdXRmL71U9emfQ3MlKUpJt8Qxzm7w0AR\nLttVMaY1v+vYwvWbSW1rs5Xfc7QxBrmKydqu1OPsxrwOgKTpymgEQpzLJhvy\n+QGJm7uD62GHGpVX9C/Lw9WXh93T6XXkRPvtwjPuJgum1HvUYjsW6shq4c1G\nKI4DzzzFh6EXOcuw7w6w/a32Ty/afTWRufNkvfcdg6wwlHEEe1boewEQunUI\n4jT1wW1d3FkertwrTPLF7MdID9BneSnPF/1ypyVm6DGmFczqVMO813JnJFJi\nNDAXbwMWnU/D7ShB/C2o7XLBf3tnG98dQ0x3kqWpfOkvEi1yf2ZkycSgdwgU\nu/OBMF9rQiNd7t/OM5A13AZTY0xK1R/6AlUfxSFP21CnbiTIzbf5FzU/mGdI\nfyP96sjOV3ynCJV+vJiT1n30oPS1vbO2Pd1Q7xnPPMDoslQNMvbQM2HxXyCq\ne1eRbgN+WJrDatImtV2LeRsQ4GiIpuT1q1G+jBRJnWMu2mjEVmVM8vvhiv59\n4+N/eNZ1gMA18+g8x0z2i9y8b9aTwPyUi9YDh9bfbP+VTM1uWHGeDNQBBgIB\nrIb2E6KyA+ohWlzgwE9+Icdt/hFEVfEPDPrbLo7lOSiVC+v4+iKkZr4Wktx3\nH6E4\r\n=NfJW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC53aNU4JxeESDkfvFBSu/awEm/PKdAWuSjVIWzcO0qtwIgR5y+2GSfGeuMqD+j90at95VNR8j4/Nqo+3aQaxW8fmA="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.2_1637746878364_0.13583229581983391"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.1":{"name":"ipfs","version":"0.60.3-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.1+62d8ecbc","ipfs-core":"^0.12.3-rc.1+62d8ecbc","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.3-rc.1+62d8ecbc","ipfs-client":"^0.7.5-rc.1+62d8ecbc","ipfs-core-types":"^0.8.5-rc.1+62d8ecbc","ipfs-http-client":"^54.0.3-rc.1+62d8ecbc","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"62d8ecbc723e693a2544e69172d99c576d187c23","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-OsdTYeAYYn92ReHLZiZUF+VnhXDZz90u50dk5W7dQqwY365Pci+DEtO9pDOESYX0ML48r78QvAc17apOVD8e5A==","shasum":"86913edb86f3e733a3ed70d1eb1813083a5d7123","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.1.tgz","fileCount":27,"unpackedSize":1685191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqfbnCRA9TVsSAnZWagAAs9UP/3pvFWtyfR/ZP2Z+RYAq\nIkO9C8QkGvs+yfax1VUjJ4Bl0GSVxwdhzUw6U7sswYdjRxV0+dVRmLDtvyzH\nMAA59KKniqo3stifuGS6XGuixtrTVXJ2rI2RDaBysCKab/XQDy+ObbpiqL6N\nESyC52JSC1SgvwTw5xvoEwiyALB4EERacoANwiuVEiXsvvWNwYiiUxVDKtHs\nBxwip46LW9QByydeNWWKLF9W/r2j8POocHzCiwjftiWP/GQjKFOXX1i8/YFn\nk9sOqS38vtsybgxWo43ikKjweF5pIVM3UW0WRP0PufmgJFLofjMePITZW3HJ\n8hr2higwL2jlOHxxl+RrlEfSDApSLCVh1qXEqdl/pBVIrRieWFIPxpxcZccl\nGoVhxftB+hBs7EYVrV3Rps+WQ73Y+SkesKgvfXCd6eLIWM8tHf319d9YtVXB\nCirqPnFSLQQYLKphJB/Bxzp12LyVb+TQqOkgeKCZ/iId/z40bZnTMT8p5fzw\ngyqYn0dQ7Mnqq3KdP+H4ENlAVr7H94M3P+hUddFm61LyFLUwkaeXO0rvD0q6\nLicrtQGyHHNq6Jq7ToNKlZ3/hNrGyVAxt2uQq+8Ox3cE77zao7WIO5omVs5J\nAherHOzIVkYxvr/Zq2d9AftOOpIgAxnZrNUphLPAdkS5X1Otsv0yOVxnyRjp\nM8zm\r\n=39kG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDl2HWmtpakya6LT+EqCqoGlhj1ljAbBNHIJicBT46hPAiAot0nmmakgr8RST2ehL3H5zNYCs+D3lWyGyTCmaY34xg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.1_1638528742874_0.43710615468921143"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.2":{"name":"ipfs","version":"0.60.3-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.2+0c269cf6","ipfs-core":"^0.12.3-rc.2+0c269cf6","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.9.1","interface-ipfs-core":"^0.152.3-rc.2+0c269cf6","ipfs-client":"^0.7.5-rc.2+0c269cf6","ipfs-core-types":"^0.8.5-rc.2+0c269cf6","ipfs-http-client":"^54.0.3-rc.2+0c269cf6","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"0c269cf67a8f6b48809472e83c4c1cff156afe0b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-OUOt6erNlGpyKLQJVapStCfxth4vr/UkxJ6GWOcgSnw1ipB72A8MWP44SopIydJZJrGNJrXwBs0mLpjOzzws5w==","shasum":"776b9d66fded84b6bd03221e592f40ae18bfe49d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.2.tgz","fileCount":27,"unpackedSize":1685330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqhsaCRA9TVsSAnZWagAAF4cQAKDYOKs5c7E8OXSXMRCg\nwMZwzBJ5RHpoH0XBd/7XzG8cCkzsexHPA0bylWuIBAwOYLgt1v9niDBJVKWf\nylnlviy30l5Cc/LYDoLuVHp4a8XmgHcbq6x/lvpl15G5bUaWHshYEvNuPBMS\nDMdUxkmkKIcV19vq98kx+VCtCihv0gz2ohDz7y4PKKUXDPnxgnAhlcl+Me3S\n75ww1SPhR4TwniGV0YenzrUE8eaBY428RQiKv45lCTbTpKZG6nF91YPte7qi\nLpECLxBh3yk4HqBnz4HFkuteEpz9cjEYswcgGW2xO1UYyOiPV9TLXq/wSydo\nBNCt8T6FJm8EezaD/hGUEwzDh/whEuHlB0w2y6EZxAFySp0s3Ow+QTYVclYg\n7C/pHfO7L3RguZkXzD90NWsjAjAAT/ZzqOYbkdc/uwzvdLo+RIpeJmCcd91N\nLpIZuBun+M5bveh0UiB23pszT/rp/gdT5reo8KW6TC8qHNiDhlUJ0j9k8Vsn\nQ71KD6snSoVvnXhenWJj/gOajgJapmrClUUKjQ0vQRuAPXcvAdwqwjSlQs+O\n8DlH95x9aqrXnTTHM5SF44xd1/mEgesVxO/VOFSnhngG9Afu6aP7VbzRGfvJ\nxToNQTm2LIWjDr3yM389oDTdh/b+7gNpC3AAD29qdr0rcuiIEIBrvxAUIjWy\nW77G\r\n=GOS2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqzO+wN9JMoK3J73oM83SgwrXW5RA5UNAzKyUJN9Nd3AIhAKO6JgUSXtWEgekA28TCJXCTQzIuIDHgb+7M6dN6hZg8"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.2_1638538010172_0.3899124262120903"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.3":{"name":"ipfs","version":"0.60.3-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client IPFS_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.3+38c01be0","ipfs-core":"^0.12.3-rc.3+38c01be0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.3+38c01be0","ipfs-client":"^0.7.5-rc.3+38c01be0","ipfs-core-types":"^0.8.5-rc.3+38c01be0","ipfs-http-client":"^54.0.3-rc.3+38c01be0","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"38c01be03b4fd5f401cd9b698cfdb4237d835b01","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.3","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-o4LzrRNIHimR8ZL/uoD4zU/pOK8v5mRUULh65q+YqdEeZwRvDHIRXodajZ4qoAx1TCfjhma44OX7NGk7CRWvGQ==","shasum":"2de6311087eaf4a250e328889392457f971ebaca","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.3.tgz","fileCount":27,"unpackedSize":1696177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqiRECRA9TVsSAnZWagAAB5wP/jnv67X+9nAjDLSNWMJl\nqFEXCFvrH7lMLIoh5RDFwtHSu8pLXy7xBSiBiTzkxS0VFNB+1ev3ovcL3z72\nrMipcMy0cJQItamfzG5KESgXaoxbN1MQxoiIILUmZ22py2WodIlOCdxln8Gr\nKGeQpg/6VyAMmflynQQYASoRQoTAGmqyw43mZYOpfyE1Yrf5ma0ZSPzRfttj\n8l/Py5KLPP3VCgbVHm65GBpL2Bn6Gn1apnmd1tpjx/iC88e3MKMj3dFMEuHW\nzHIhzfZ2zhNo5POUjxzQ07m7FsnRgg78kwwfv5EBjbtmesxCKWjSbJ8vFGN0\nxCe3PEP7dtCQFzQEYw4Un1n7N1RN600WI3ZoU/BfG0cVQmGf6ZkDuvVbLbAJ\nKkYzfIpCpcZkEqhrtMfkMaNApeGwMNtDxUjKcreSGq6+EQ+FjK0On4z5yUJD\n1w2AhphwfviW7xYKyc0PN9VYo6h80LGxVPAL8tfu0kU2TME0G0V8XbSSk+Ch\nKCLWlN9p+K6k4+dVvHwsy3JxCOZpw0rQqJOm0T+yyDjGlXpO+wtlx57dT3xm\nYD0ogYC1H8MeVBS/medjFV/m4gzZVoIPf3YFL2zGU437Cgr+1iCkSysD7vAZ\nl62LEHrpJcR49A/TOaXHI3+NvGdNRlJVYRsLkTl3FgAZTZztnJh7ahaRr3gE\n31xZ\r\n=Ji58\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHnzh+YimCAdga+g0JI1t+2AY+4LJzggupqAN4RQH6dOAiBra+hE1DFS0V6KNxRD1YefyITHs3GIUQqnOqfF7WsEkQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.3_1638540356532_0.236873056235124"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.4":{"name":"ipfs","version":"0.60.3-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.4+9018432d","ipfs-core":"^0.12.3-rc.4+9018432d","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.4+9018432d","ipfs-client":"^0.7.5-rc.4+9018432d","ipfs-core-types":"^0.8.5-rc.4+9018432d","ipfs-http-client":"^54.0.3-rc.4+9018432d","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"9018432d5dbea466b8332b0a917a166942e40d29","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.4","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-lYjxwLJENc1ujmHbp8imk3Cv1IMT59FRddY7ie6hSJjkRIDC4EbcvFrlupfbTimm9zaXdcAW4VdKB2h5SgZbcQ==","shasum":"a385cd7e85a1ef8bba989513cce1b1e3d7e7faf1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.4.tgz","fileCount":27,"unpackedSize":1696183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqjFsCRA9TVsSAnZWagAAHeEP/3hswW/xeyre7wLFtte+\nH5aTlcKPE5SBKSjmCqj8VIrgjeXtOo/9bMsykJbgKEspoXm1f1LDUIAYbPO0\nO38VuXqpdm1w2vQ3XbnhPOaIm+dw4aWugRYYpr/HOcJfa5V2YA1EB1RJ/vA/\nWSkca0XQbxxumX0z4xuBH2WITms3HnzKaBL8QWoIYeyujtEM7eU4iuDFZdnH\nOmJqJy9rzPd/ZxZHmIS6vzLvEZ/aXCGR+6Cudao0vyANFZBfK+Jt7hTC72YH\nubyQUQfGcG60XpN4XdkhCmh7W7WkzUBNwN+A0eE7NusOJIeqIFYz34ccyreY\nJBKe3qQIM4NHCEhC02g0tD0ZU4Wkqy1HZZ+QyNkl2qelinqRt0eRVnq0ABq7\nUDIGqMYDQVr5Ix6xrNV6uXH4gVgBPn1gd7EPGWrsu5pDfryApkiAIXcYOJru\n02tA3yAlMa8D6vau39Ppy7G905ks7JlFyFhzZgUB4lvCmgVaoLDhvGq/zReK\n0bAGLY4D00K+wIBL5xMPKPVR70vP1Nq1IWhLm52JzVmB4uuNqqfSyojzen6Q\nEEGTPebqsqrN9RtfjlrxpwarZZqeusA49lyINg0eu6091+QMp1g3Bx54xppc\nPpTkwPCFFjMDfebWDUDMKKYOsXgDEzw2JnbvI0gDsJqFykBXnzjavASow/VX\nWOxn\r\n=qGM4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAdYpY2iPhMHDqQkt6Iv0IjmRKjzM/S45THYam4vZUEzAiBGedp+6JDtQjIaV0fw4f5JODebWiQNjcep224zw8U0ZA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.4_1638543724098_0.4322061949823328"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.5":{"name":"ipfs","version":"0.60.3-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.5+45ac9730","ipfs-core":"^0.12.3-rc.5+45ac9730","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.5+45ac9730","ipfs-client":"^0.7.5-rc.5+45ac9730","ipfs-core-types":"^0.8.5-rc.5+45ac9730","ipfs-http-client":"^54.0.3-rc.5+45ac9730","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"45ac9730d6484e8324acfbc3579fce052b8452d7","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.5","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-fUzcCvaslt1CfcFEV+DNIj7rDWUyWaTGPRkUk/Ws6a5lcpnSK/aOMGVjAzzeo4fVEJEwcHfMnqiD1d19IZHHdQ==","shasum":"d089c0ad46c7a3cfdd154f8314aa8060dd3a4e58","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.5.tgz","fileCount":27,"unpackedSize":1696287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhregUCRA9TVsSAnZWagAANRcP/1GyFRGC3GRWFv92WyjK\nERAs+A1G2g1ETPEPMU4UYFb/Zi8UKfi//WWFrpPeoJsgKcwxlQRouAkNifbz\npTukjRMF73HRpMAqBeJMd1Tj8Bq0Zd9njrwxKl9cr/fYbN+zlo1tqM9O0++f\nQr3ho/VwqCFee8aGh7K+YUtYHZ4oHnb+7q566eWGV4XX800fNHErYQyRyBHc\ndddFyds5nADMpQRforLLoSCd3PevZvKLcKXJtYT8jzNVSskCPSF5W7RZjEay\nO+tL+W9K1qzktW4NO2rgQUChm2OhG/1QmPJfDipDxhU4LU5jP0wz1gZPfoqb\nif08z3uiyCrgNipH9VKdF7Ad5eNhKobxtzFnyMqkQfMlEVS8sUwTriyKLAnt\nqGbhdbtP/DTBe0zYjtw651U98e1ixDaAb8fuYGDnVeX76HVgdEFK5fBGW07n\nYCijxeAEo2F0yqrVQ+aQ0Hc9UbpqiE/vsvCJdDoh6Kg/7RV/rrNNJseyOC4z\nBJNd5GB6wlC74cwp+QaOHFTu4jLsZ0PahPwz/0oeGmqaMX+YNc5mwuvk2i8t\n1dZgtX5zP4EbrgYYEtIFDc9iDJ7SCspZqTMN06Kdw3+TajfBqL9IhdjtVGC7\nQ7BACMW6+mga8jFojS4Ze0KKqQotCtPQ6tA/xiuzSDWLe/hz9RlrNXoC+P0I\nQqzh\r\n=r0uP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxCJnqm+ayDGvc7Gh5MipqFNjV5GktKWsf9Ll0JxTVdQIhAL5TJt7HRRwRmxbZpRN4CWsLUZLeDiLf2luxFOEReG4i"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.5_1638787092654_0.7627192932198879"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.6":{"name":"ipfs","version":"0.60.3-rc.6","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.6+80ac58ca","ipfs-core":"^0.12.3-rc.6+80ac58ca","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.6+80ac58ca","ipfs-client":"^0.7.5-rc.6+80ac58ca","ipfs-core-types":"^0.8.5-rc.6+80ac58ca","ipfs-http-client":"^54.0.3-rc.6+80ac58ca","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"80ac58ca27cc9f21823a23d1e6357f738fdb6781","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.6","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-24yy/2nY/ftl2hXcqXxliixHw8JyqAVnyGgZX5ZgGzjIzeZopiloepLkVIS4wETj7lhXYuxhZvjOye+r8cG1jA==","shasum":"21926a9987d1942cd9dcf43d201477973c486bf4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.6.tgz","fileCount":27,"unpackedSize":1696287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrjpkCRA9TVsSAnZWagAAy/4P/iUiqkurKHyw2sc3Zetl\nfxVmfp8+UEMpPSITsXv+SkgDjUwn9vd7YwmUF1PuksxzNbjDCRetoVFVvQdv\ngVmFaeM4TNa0+mHTCvcntT2nReJaNT353j3WUJs2ZWsZ8Y+VtOSCb46VSY3s\nYS/gkksvKZZxjWTiN8Ek1kIdzyL/v7Ss3qljaWCzgHQQW7rL78lzCmL/ZO+2\nSTO0gyp3qR5jYwl8bcCv0UEEWXz+W9mhI6g/lQvVhinxZtkfYUDy9XuwYby4\n7xkjbSruD621bkucmP3VX8C+/AjEZuyIjkjp4GdeOvMCdIt5SUnt2i5fkBEF\n9GsUIpMo/1MXOqL17c76moz/yL9SJT0Umm3VnRHrAjI6ZveJI6tcMvg3AQEz\nbN9WSMwt6FAQttT1u8MdzGjDgsDAPbgqEHcxoPKjXIlos82PjcgT3dWMjb04\ncbKUR6U0VwRjp/jnLHRPn21YsaPi/t1Irvm/wjtmOpB3bryosF1tF7bZmBeo\nmCcbagtzNfhICuWTtzyD4KPOJwNfm+/ocI5OwbtC+12cotfdUey4qByuWmN9\n9e6OF0Nowy2jlcyu5j7nF+tmRLQpiMrlAFTS17KWwOU/boxoObgwLgraUb9w\nxGFtK+oDGlad6nNIKLqFxGw/P/pZPfCx4suVq2OW3mtYxTCdMxseQfNKd+gm\nniMx\r\n=q6DI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDm3/BdMnnZIL+4Iaz/zxlGXm+P3ia1mgxfJ8ShC4tiAAiBxOnFAWkMD4+d/TzZkXkM3HeJf5bqE9tqk+MQN0yFsLg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.6_1638808164441_0.7136232575248371"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.7":{"name":"ipfs","version":"0.60.3-rc.7","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.7+c083645e","ipfs-core":"^0.12.3-rc.7+c083645e","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.7+c083645e","ipfs-client":"^0.7.5-rc.7+c083645e","ipfs-core-types":"^0.8.5-rc.7+c083645e","ipfs-http-client":"^54.0.3-rc.7+c083645e","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c083645ee68aee2fd40f0bd63fc5b4d1395b5b33","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.7","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","dist":{"integrity":"sha512-WEX5uIUmi4bZ/bvoaClCWMAWk3bgZ7kTLTibQ0Ui1s0cvHMg0Qj1C8QkK8UBaIRBFcnu0rhyrfJrTEkWyikCjw==","shasum":"5723ff8945d4e684071e70f2b80198ac37d4c196","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.7.tgz","fileCount":27,"unpackedSize":1696349,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhro2ECRA9TVsSAnZWagAA9JUP/3kTmIBYxsn19368zIBV\nQEuxJO9+jHzKBoTPngEUXQTz1T4012ls6httgJ2NGSt7lMQnAnHefkdt5wvE\nW+jbPb2KC9GkD6zkrQIJ4bPCBLU7Fn14ezBTApTtAA8+Ll1xKKR2brsAVNyz\nfQgVGQb15+ZwtuI+CmaHWZfav86kbkx7UnmrRlfYIOWIF9HX9RY14lhuE/Em\nrn1/6H43U21KThDRrsKzWGCNY3b/h49NPggFPx9FuIu84WsPjgWFu/kq9kss\nT2OrtI0YFFcpiOkbWp/hyX5EXcOfOf1QDxm0x0BXdq9EGtFcRzOjVNVs75DI\n4zWkeKfHz2tZuP1q2WutzrJvGzhvt/rfdJ2rifKrK733JpYXPMotMA1HOenT\nQeTq806uK5byl+icPOFn6YSsEXl8Pgz59U1HUtrKyqVRtdrTtNZ4DObNfnXv\njWygJywhWFGq10AQ/kBlL50c19M2FM2vPBosqSgGb8jmRxjPy6kzDrRWMriT\n0lp9+FAhaL3KB1yCwX2qTO4Ld0foaHd6bjj3dRvOLwzVhFaskn1L3B3KLp9A\nAFkQUmGEBg6zPlUHUaGAKSWWMiRun77oegdwHvaoLf1vhAIhopxKXZVJZ9MW\nkdV0+r2/AcabY04kr3jiQDuG21A3FIjDHUeFlOzxljJRYFpfjS15jtjSqLCj\n9TyF\r\n=eDza\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHBXxOskOMwwoEYnAyM0cFus2vwIzBZMxwpyHJrSoaNHAiBb2mF+8dAHHdqnO2zmt6PuTj9UjgGJKhL01IPsp8Z7aw=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.7_1638829444243_0.23196880436030676"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.8":{"name":"ipfs","version":"0.60.3-rc.8","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.8+dec9e4c8","ipfs-core":"^0.12.3-rc.8+dec9e4c8","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.8+dec9e4c8","ipfs-client":"^0.7.5-rc.8+dec9e4c8","ipfs-core-types":"^0.8.5-rc.8+dec9e4c8","ipfs-http-client":"^54.0.3-rc.8+dec9e4c8","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"dec9e4c87ca7829761ae6f63a4809783e53ae558","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.8","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-xIqETwr0Cefh2GYpP229Pt1KxwiHrGnoE01TwSvjOMlds/zN6Ks9I8sLU5MQG+mHklFR6O4dbYT0MkCOYJHg/g==","shasum":"4e18bc1527f59b9385726b280bd839179d3d33ed","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.8.tgz","fileCount":27,"unpackedSize":1698649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhty/iCRA9TVsSAnZWagAA6SkP/ivOH2mbGB0fZWZDcoWU\niI+f06V14KGgdGgmyaittp6cljakKe52IyfR6GhbujJsrOzJyBQ9UZUNgYj8\n9v1feYofGHW5NZ26ZAZ4YSW1SxS3ePiDpRcVE/+4F8d8+ATJarb3m4WAHJkw\npI/U1O7R52TQ7bnhqTF47hKytQQwd/hrRpqot/nYsEhUhgX8KNvmUrbYUBOu\n1FaRnAI9qIV/v0LpcsKbcwSGW1f2YGpC1EffXsuAdRmhBFjcP/xI8a3lgDcr\nCfEPnqS70+5aCuJS3y/IyeJvcWh3POXydIpICAnTuduUvoWd4MpALnKZyhmp\nfhjnPjckLldrGwHXTXFV0bJvud42O6pKRuc7L21oomKY7JStwlUJpnktGGUK\nyzY3OStQGjg/esdiEeQ5IwP6SLrSrHsNJ1aH8rxz06mTT0bqyEeNUjySn2vn\nJaHvl/5sn6Rxz6VZjNdiJv/09Oy9YFmSs4NDSf5xOiLfm0ctTiCb/72APZXK\njWsHxJZ1RxOjEBWLW5nhxxkZJXE8oEVG0UJR6Bmi+MoGQypLq5nh2q8b9qIu\ndtgK3llDkpcF5G0IY5P85BgtERY6gQNLd8xD7t6RQM9rsTzfsFi8vBiOWC0Q\ndpCMB/gEhidtTwsYro7UCTadhEzKNSWqPTmOm759n+Tb/q1bLWw1WJ25wlWG\n/Pmu\r\n=UH7q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3fqIs/WFqZlXCpcpF80dQ5QSt/ebaZy0S1jq9RZc7GgIgPUeMXgcdnZdqVZYDybfGTZk1OawJx1IViagLJmk7uuI="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.8_1639395297959_0.6156055756286185"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.9":{"name":"ipfs","version":"0.60.3-rc.9","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.9+adde8c13","ipfs-core":"^0.12.3-rc.9+adde8c13","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.9+adde8c13","ipfs-client":"^0.7.5-rc.9+adde8c13","ipfs-core-types":"^0.8.5-rc.9+adde8c13","ipfs-http-client":"^54.0.3-rc.9+adde8c13","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"adde8c13ba433b81e76033c418607be389fb3d31","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.9","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-NYLcnx2u5Be+pMyg/sHshbTkSfeuPLzoW0eL43gm4LsonGbqZL6NBhEdzHHHHNbmJI+AXnnKu+bSFrEpKV167Q==","shasum":"e249c90f324998303b688b8b294261a34198f392","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.9.tgz","fileCount":27,"unpackedSize":1698833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhtzgbCRA9TVsSAnZWagAAmJEP/1URyL9fWCx7x+OhatDd\ng8YVJGX4VLBpKz/oUyu0VdQE0g180yPLZCTesC7zNBe5CDsEDVFCNJ9LoqEL\n0DIYIwtLGICN3DJskoEgzdO2O5GjZzmMja6/0NMj9wwrxEUWhLeu8YM50C5Q\n3x6i+n4iWGwXrwzMpsUh1Kdn9SRgVfHJvVD2DtPSiK9vAxwtyZpvexQ/9y2n\nXHBAgum/jjTTiyJHbxjlYrBWoziNB57TgldwbN1HeITJ4Ynyn6IWMt6Scp72\nrm59XWPJUNsYSlISGOv85Bi2LQPXyRdLFodZZk2uRCIDahesVqFVZkDNRPdw\noyz7AaeoumbAUyx54P4H1HnjJIu3m00uhxYrvyJWkcLmSpypqhixFMqBezH3\n5CJ1vZ/8ibdQpPqBAb1JQohDQDssoFucnCiARCSMztiB8dy7Rx0yBOfMSB7G\nYHFpusX/jXcFwwEqP+llmgmwmst4NfnV64/bB1DxjS7B9v7hOMn8zMzjsCJo\n+fschugEA0qZiOuniCpfL/6lmlWyvj9FOB2V5tF2yOxRbQRu4V8/vYns2cPc\n66OEj2es4CYGSaQc+xRmyfk4oWBlCY6sWEy/lSUh9NvP5hnG2rFTgc1XfBNs\nWLaVHptaLr0L+CQJpD2SSVf62NwFi9YaCJLGoWZr36FwSl5wZeWKCK2dxaFD\n87pA\r\n=+w0h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkNzaNLCGmACAkdM1qwb7wFA/O5Qhb4QXDdt0P5PMATQIgURrt3adolCekGT+kRN5DN71nXYhbOZiU1Dgs5LaSMuE="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.9_1639397403249_0.4619639586800919"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.11":{"name":"ipfs","version":"0.60.3-rc.11","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.11+33f1034a","ipfs-core":"^0.12.3-rc.11+33f1034a","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.11+33f1034a","ipfs-client":"^0.7.5-rc.11+33f1034a","ipfs-core-types":"^0.8.5-rc.11+33f1034a","ipfs-http-client":"^54.0.3-rc.11+33f1034a","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"33f1034a6fc257f1a87de7bb38d876925f61cb5f","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.11","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-8ZoijkJIGjobU4wSd7LrsVJXsAihdAgV00AoTe1SvaYXZySEEtiIBWRuLUeAzOo5Euj7HJAo0uYQxj89S6dLGw==","shasum":"e8e61571f555b872eacc70b5d283fff99759f323","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.11.tgz","fileCount":27,"unpackedSize":1701176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhueSrCRA9TVsSAnZWagAAUucP/RASzasktwQ32oX1iyoG\nbJnHXirH4RhMm95mef6BJLSFrr3u1Rk7LyJokyvrIffEwqMWG0PNwyV+0ZC9\nH3dCA6ouZFcvgpgyliytZHwj5o/DlmS4BVo8ijbSRFnL56CJnMc2+YvP5zXy\nOVc2DI41E++y9Nyro4mG9+WEbDjGh4mVzpVGqL7Mr8NpDYOnaxdWLgZSBKP2\nVeuPtNUTI8RmDJ8UOApmqISCdWnwKBacnUv2VutdC/gcYDeNhiB9jl8vxj+u\nvKcg92H6lFElPy+fgnU9TcG/Bkm1eTmNsO3WPZCotnO8j6983OeMDMUtzJnI\nNhK9tMSXK78kLym60gluZOZaivyb3AQ1DcnneIHJWH4z+S9OMFpWKE6OMkLG\n5p9OGviYZVL0vdyiw8ThCP7+ONXCezY1qWd0Pi0YyNvHTB6uIfliYEVIsMWy\n5+R+6wD513LgiqgVN7lQz2V5yQygH81nsjsgaLpOWEK0aj/pjMmiEbDdYZ/8\n5pgmfgor3NrX4FqHc2eSvolKnTk9aC3HgkFKVM0a7IWIj4eKrdCONmQ2cUEG\nHdRdpZO9CvfftHj2MGxugzwh2Ox/TSopp1qPSEVfnz/Kfgq0ygUteHpd3C68\nE/J0rZVbIAFEX/GZHGioGtmv7y/EW9cR5PMBu1giszvA3AfFOLngGrMiFmhT\nyonz\r\n=n8DA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8MZW+2pFkrRI+O4hXomsr7AaBNAnHj5S69h+NacrumAiACOabW1nW84wUvIWJ92w/96kZR95i+DsCLf0mZOtd64g=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.11_1639572651210_0.270645441536578"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.10":{"name":"ipfs","version":"0.60.3-rc.10","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.10+73476f55","ipfs-core":"^0.12.3-rc.10+73476f55","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.10.0","interface-ipfs-core":"^0.152.3-rc.10+73476f55","ipfs-client":"^0.7.5-rc.10+73476f55","ipfs-core-types":"^0.8.5-rc.10+73476f55","ipfs-http-client":"^54.0.3-rc.10+73476f55","ipfs-interop":"github:ipfs/interop#feat/add-dht-interop-tests","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"73476f55e39ecfb01eb2b4880637aad658f51bc2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.10","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-mJUnppqnJp0iZEO39mLTXCOqKUsa7owYym6iOzi/V39PshGz4w3on+hABR3S4a7BPkbGagYZWz+0EhNtiI00Rg==","shasum":"7ed54432efb25ca2aa237f0c18f34792e8c61669","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.10.tgz","fileCount":27,"unpackedSize":1701176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhueS2CRA9TVsSAnZWagAA7lkQAJj5LVKbHEvELurodoja\niIwj4KMycLDc7wk1xwiZGK/6fsMHvx+AeJSl4qJ5malG6nN87+ZMTCBPHfEx\nOq0siu9UYed4AciGegdtVc+ExCwLt6KN9rVQixzvuK8EbstQx3qOz3Ocm3RE\nkonbV6YzNw/AffViV8oYLC4rM1rciFrkboWn7zs0XOEHz8ZueHO8oqm/fIDS\ngYuZFEr7/nnIKFP3iRMiX4aAP+nwIfT4F/rXaA+pyl3/UAx7+CjcTDMitNrq\nMz1PSqgTu3z/oM6Ht+tTlQhWG5U5A4JeAhEFwnWyWfactH1171cFtMiMGLbc\nyD1j1Enr3L2qd+FHgC9F7RVKYu+SR8Whr2BPvhIfXeTpUIYXbrfqIM71u+kG\nXrJXWl6e34KWmfOVrQbioB40HlHR7eCEDbhAz/PONbAJdm3lGIfam0Qtm/ay\nIgckE8PlDRn4X3nlFtfzD4zSGwpTqGUTbyOiH/vaaJQReg/Ip3BTFXVxJzrS\nLbaNY1RopexTZzqZrahnnJ9g48w2k0WIYRQAKcH+fa99qY4hEWW4VQfvvZ1Q\nfA9Pdb3DEE3ld/96H0YXABp83rHDwqfz3Kz/h9ubsuk8arrunsHDe1iYhB8v\nk5OLXrzHC8TqyReD7A7CoHx7thfJx/X3aaglUJBhBedhJ4S1q6rcM4tkTPKv\noWyg\r\n=8r9c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL+NjNkTTu/wLVtAqT5hhlZGSwWPamgHDKto6b6ji1VAIgNN08nnKH0//LIJ5IGZ33f860qCl88JmUdLPRqTkV+I4="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.10_1639572662488_0.6552595329494921"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.12":{"name":"ipfs","version":"0.60.3-rc.12","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.12+6eeaca45","ipfs-core":"^0.12.3-rc.12+6eeaca45","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.152.3-rc.12+6eeaca45","ipfs-client":"^0.7.5-rc.12+6eeaca45","ipfs-core-types":"^0.8.5-rc.12+6eeaca45","ipfs-http-client":"^54.0.3-rc.12+6eeaca45","ipfs-interop":"github:ipfs/interop#feat/js-pubsub-and-dht","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"6eeaca452c36fa13be42d704575c577e4ca938f1","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.12","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-gfLNHtNPIFs7EJ6ZUnxlLZ5sfgyBt+SkZ76lCOVDMRwKE79XYoFKeJiP0W7Wr2iUdyEdKc0Z5XqbS9o0CcuEOw==","shasum":"b9291a5238a56013962671dbda846df1540d5cf7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.12.tgz","fileCount":27,"unpackedSize":1701337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhueVGCRA9TVsSAnZWagAALosP/1H6GtXHm0KmbWAQD7IJ\nbMTJ4yLOIKqbcGEBoVhixPT4oIuEPjpdOfl1Vu9ZiD2PraYp1tFunLGLDsDo\nmAKvFVBI9p2rcvrWokt2Ph8mLCVilbhL9wKpV6vKaTRArbZrA+hK6e9wwm3v\nrvowDgza+kyrN9jpI32K8tW39TsNt7qfLiJUREHb+iyDwt2kTWH96a5/dBKA\niCqauVMotAV80NnE4233vfoJa+RjndV1WWGSGJv4LZsWLF6FP2zDFkh5TwOG\njMI46dZ5wjyLuHKNoTvHVUnL/VXn0e36uqsgiErXi5dvA8KOD82oqz4ctdvP\n9Mk/x8c9wliTpjBxnDVhWqwv9m0Rxo2FD3y4/g+miRjboE7rxaZtQL/qkCbE\n7NJTETPjYfp3uDHqpftypV6Bd6m/GthIJA01TibMXtlbR2pgXnoALmJDSBJO\nfbgshGVt+ABxan7wnkFeZv2tSq7pGBcdbCNfglxzlrIpYaMJr3PR1t1IdLDV\nnhnAO1d1HbimAjxuGFLEECR484ZqKtd5YuvGu/hNorVQFMshvfyAT/+E1jvR\nb7Ic8i3LfKy4Ysd6YP4PxaSPRdXcEttwMLPHQlzRWKCd+CuaukWvIR5VA2GG\nnkkuWbUwdslikJ+LZsXzPH3rcevt1TCKqY9Ir014NYCWGwWaUI1WL+LUQex0\nzSQI\r\n=yD1W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4CawlqIrqh4KA7MIUaoVSxtgL5C8PjSxPhyM+1AoGQgIgL++7SdHouD411uV1892UWOuhX+toHmmod5Yv4Dx82nA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.12_1639572805954_0.6164454947779248"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.60.3-rc.13":{"name":"ipfs","version":"0.60.3-rc.13","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.10.3-rc.13+d147494f","ipfs-core":"^0.12.3-rc.13+d147494f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.152.3-rc.13+d147494f","ipfs-client":"^0.7.5-rc.13+d147494f","ipfs-core-types":"^0.8.5-rc.13+d147494f","ipfs-http-client":"^54.0.3-rc.13+d147494f","ipfs-interop":"github:ipfs/interop#feat/js-pubsub-and-dht","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"d147494f362d38244bbeafbd6e7d76789c7c5020","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.60.3-rc.13","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-0qPVqgJG+qOp7SQ5UOSjx1KQg8Tz2tlJ98Ce2t/imuG/jZueA4uvVyFOCOKRONkCQxZHLn0GHXx2MOsrWGajbQ==","shasum":"821b0e60fefdf0683e8aa6afce1b682b1d331712","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.60.3-rc.13.tgz","fileCount":27,"unpackedSize":1701345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhujMeCRA9TVsSAnZWagAA3hcP/j6efOKgdfJmjDyIiZgd\nJFv19qEf4+B1o5RIF/wbvRzj4zGzS2bXj5YoehrM3tlce54yqxR4ByTJcsUQ\nPs/5KhZ7TNsKtgli0XQRyAPYlrX5fQkE3VykFerz6p+7gjmpQv8wVikQ1tBh\nJSqwN9RFxjdLckhSw0Ij4T7HZnSF00oZ4Luo+h+0x3G0o5JfEAovv7IXDpGp\nBGOtvo92vM8tzvLl+Oj/ev9Zc9DGI2xp65hSuDwb7qvj/3DiJ77Oj+ty5Vxy\nYDKY+TwjL2OXd5K5tzli9R6//5UmOpJsnkte5lWi1tPa2/0czBQVjfbzAHbY\n5Ou9j0ZMb2jaxYyuNFQEu6gh4LT/nSVSHAoTu7/ompn6+w1tuNBzwQ0pGu9U\nqXaxGdpqqg/fAjiP+/meuAs6jQgjbtR6OzEgWSVykJ1SUUTwTrBff+Yf5In+\nYC5HTFeY7qUTftjk//tjMIS0PrsG171c6wUeQ18Z203iQL7JrN51To63tqje\ncxBdgLDxeD5q8buO08fxQmmZKnRzNxfcxZ8iriz5GXpOIG9wy0+tJ9UJZJ+J\nyDMDHyt4wRc9xW27g6CA1GpBKmuJJVJ/4qwpn3xPlupAtHAuAXpA1V4BN+Za\nwsRuimXQ5OFYoGXR/wZIQqfUiNrZXRv3LokYrNhbG4BFXn1N/x/2foymyTiw\nZ3y4\r\n=t8nJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrDhNVtqCf5M6NJnQ3U7nbTMHdqGYx4NhpFfuhdVe8QQIgWOXdltAwU1cTk5mzWzHXgme4I/6GEPmrwxs6ZogxyAg="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.60.3-rc.13_1639592733992_0.04387056736001349"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.0":{"name":"ipfs","version":"0.61.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.0","ipfs-core":"^0.13.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.0","ipfs-client":"^0.7.5","ipfs-core-types":"^0.9.0","ipfs-http-client":"^55.0.0","ipfs-interop":"github:ipfs/interop#feat/js-pubsub-and-dht","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7375caa8805298fc671ed4080e1023aafe756151","_id":"ipfs@0.61.0","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-BNr1uR4TVbTEA2k0sdIKKikmEZ9SqW+qPyBmXKykgQ7aCS6gy6XcuheINd+7O2lqwtVMAR9dnCv0hQbm4FIZxQ==","shasum":"202837189757944af1e77236092f605cb7a76f5f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.0.tgz","fileCount":27,"unpackedSize":1701098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhulAsCRA9TVsSAnZWagAAw4EQAKLIiJeiToe4RgIKtQPQ\nK4xaePjBh6yzy2JKlah4aBhpDpA3JqTy/XwoxwVjzZIHhingJO479PeYqBPZ\noyNa6ZrHcVGCQeXm1EPLPpru+BLxwWH9uWjvwTcqnYE1ikF+U84AolB1ysYl\nGbXBl8gne8vTRIvQEuJUYZ+0Sbez6w1lqegkGBZl2WYvibC3mvxhUjCkMv8e\nwQlCcUCeZ7j3Ac2WQkjSkYjd8UF0qDrEi1vnHu/0fakcDTMqScH5mTRywxd5\nrBIL1dm+8Bf/mbn4+i279R6cZOOIyfAihvaGT3YE+dXLEzC7yLp9GfwJZF+w\nofeHb7IizKbCi3ldhk8IYxNJ7GqEYyjjaA9K1QcJh3PY3cBVu6yPQdktAjFx\nFuXVyhNrGdgYxEpGWPWKAreup8pHW5+4m9Usq57K/2yFAgX8oCiXj3K72pJl\nxtHv3qwFLtHdE6TyKRibkws1jyBvJz/I/krGsL/ypcMmfw3UNErbL0OFvKku\njCScDE/ckFejpzNYpyPLnnT16XWb/5CLe84s/KDiL74l3xthgd5LuyKBTEtg\nvSr+1q47LAso7gSww+wgRMSYXZTz2f7YK9oJxCeXe1LBtAX0ZOH+oK0e53rh\nIGOOmbwqZeytx/LM3WqJGi/ipEXM8DFzZ0DPVb9qrXp1Ew7Gd7u8W5WLo04x\nR+4R\r\n=9nd6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAeEVhdU895lB/ZdTt+zTnG+4E9rnByTuo74vHe6cjiJAiEAjh+0+6QUjJGRedT37/e/UaI96U/NTMt9q+bhMI84s58="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.0_1639600172333_0.39322251154440746"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-rc.0":{"name":"ipfs","version":"0.61.1-rc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-rc.0+7375caa8","ipfs-core":"^0.13.1-rc.0+7375caa8","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-rc.0+7375caa8","ipfs-client":"^0.7.6-rc.0+7375caa8","ipfs-core-types":"^0.9.1-rc.0+7375caa8","ipfs-http-client":"^55.0.1-rc.0+7375caa8","ipfs-interop":"github:ipfs/interop#feat/js-pubsub-and-dht","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"7375caa8805298fc671ed4080e1023aafe756151","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-rc.0","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-hzm67gK1uRGyowqz20dm9a7Kdk/T6Nc//XYyj6x93lPWrhVcpyCHI7iiz1gB+Z75rrSHNmYDHU1bgk8HVlvIiQ==","shasum":"535e46fc806441d06b045a7d86439e026f84294a","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-rc.0.tgz","fileCount":27,"unpackedSize":1701334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhulBbCRA9TVsSAnZWagAA+cwQAJSfV3eS/aptWaXAXlXW\nTltzfruy22wLVDaCCN43rzGe64t4D4w9u7WASDT3dkYHjYhCHLI/Gaxpi/AW\nl8y5AuVWLQNUYwuJ0dQV4on/ZvPHaHvbiUkcbpzvxb6jBvp7T4aTZrPDH6WV\nNKsUj/26figMib4An89FSb3mpNsSPm4FQuB2EsV29LK0/DUToNjNI9Z+biA9\nD+fyWK+z0xZM2f46ckyyd/D79ErrMv0zECgELzWhJAFjuk+v7UECQoNwTMgx\nR2YFjPg+NyHF7oqVo7z57F6EhEx9T6RA/Y5J9gvHV8Yx8apkiv8+Yalbl60c\nn++9XMjyO0K+V2UkCwfUF90DXojgaQQ+ri07SrhN7RoQN1eB3AE7Fh0hq4dD\nk3vNTBNDQwftTq3HjiV+g+fKjcRWpMXrq9zi+ZnESrjf1cGkVCwXWHY683Rz\n5/2qQ8yzF+s6x+aN3Z1diMDc/MntJAGkZXEVDRwSWY27y+KwJ85R6582REPQ\nDz5P8X7K7FH5glAyr/v8ntacwi6SpOc173FwZR+J3g9jxC/45HHml/SXsTl2\nGU8/E9u3G20JvvvSFjam05o+5S8SuXW3umoHI76LjfAPdN7GgtMQ0cu+B+p2\nq/EZZ6n/6SVmCzSwlJY07OesiHFY3cgsWr2HxSLFCpcHKPUCEjEL4JW7+n0h\n/RxM\r\n=LPkT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTna9LU9/0Ix5aM4lbTTryviKhYIiNV7YycVLY2hOFrwIgNMOUFQzchDnue/6QBD9GBXX1kvI3D3rhQmvcTVvs9bs="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-rc.0_1639600219553_0.2996205684934117"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-rc.1":{"name":"ipfs","version":"0.61.1-rc.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-rc.1+880e47d9","ipfs-core":"^0.13.1-rc.1+880e47d9","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-rc.1+880e47d9","ipfs-client":"^0.7.6-rc.1+880e47d9","ipfs-core-types":"^0.9.1-rc.1+880e47d9","ipfs-http-client":"^55.0.1-rc.1+880e47d9","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"880e47d98cd89d774d707d20bc4a3db8c0d3c5cc","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-rc.1","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-Q1+cOQvkcd/KQqPt+P3Y9xxOtfiz5okoeaJzdb/xnC3xovAk6SfWTvKGgEAYtG/gv0LpOcabF5eS6892eX2alg==","shasum":"6312e18b53db3feba7ab0aacfd76711fbd698ce0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-rc.1.tgz","fileCount":27,"unpackedSize":1701305,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhuwHRCRA9TVsSAnZWagAAdmkP/0fLu8tcff2V38LIF8U0\nXyzqhTHR0rLGkBePLpd6Bp5CpPr01SkwY0A7y5MinZpZWoE0vMHsnjPoajx+\neLRkLFwSE5KHMVjW2R5QzFpMYMuKHYalrKmiDaL32h1NowdB3Jp0/pF42m/p\n2XXqwJVaP2csjv7UZabOi6giLsezTIvyQDOFCC7q5p76MYHuK3QpXUyT8gYN\nWlAG50JDGQzT59O+gLik7uIcAyEcpPSbrfPTyxATxuyKh5RLGV1lufvnRZOF\nzDKmV+2ssPo63MfYgczVtKlwnsSRoPyTEQH0Qi2rj/ZcmNf2WptvPfra7mmQ\nINcOnA8ysvyMeJzGSi89BQFxMTS5RdXhoDlzM2iopxCJQzaW8IiB0KoZZbTS\nzZrFJkeKy4Baw7v0494mEPC0yTmvaPJRbdtVuFQZbgQDoLcKO9/F0i9rN5Zm\nAgzJP5jl4W4DLrv9NSIOrwUESkYt7PWjFT++tG0W226RDRCpceic06A/s4AL\nuWb+mgOj8yCb3+HToJQjtCUQJr5zaw+Wr2ruADk7y+Zpsf6isH/O7lFa0+mY\nFqjjOPTtLN7pW3gmwS9zw19sWJdj7gM9ga5VZCnrVPaJ3lIrbfL0GLMWuzMP\neRVXLI8skVNNFrptmwMfCctCX7th4uz74uq5NgnxDvLWxo0nNYOs2F8mXPld\nBzpi\r\n=eEPe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX8Lv6PAnEa5tBWV3bno5PP4kF2qOeRwMGgTyxxqrvuwIhALZL5hHavhFaChzFrB8hCUN3yOoQVTVMBz347sQJic4d"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-rc.1_1639645649406_0.6799232054156974"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-rc.2":{"name":"ipfs","version":"0.61.1-rc.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-rc.2+45d9baa7","ipfs-core":"^0.13.1-rc.2+45d9baa7","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-rc.2+45d9baa7","ipfs-client":"^0.7.6-rc.2+45d9baa7","ipfs-core-types":"^0.9.1-rc.2+45d9baa7","ipfs-http-client":"^55.0.1-rc.2+45d9baa7","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"45d9baa7576a0ac924f3d01d49371bf1a4cf654c","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-rc.2","_nodeVersion":"16.13.1","_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","dist":{"integrity":"sha512-xyHps2JsfMXZCzi5uctADJT6exOpcM/bKPNlJcupxwnuiIqZrSgoRGiljeVqcjEuEoQ4iG9ePUzWepprK9mirw==","shasum":"8da4ed055b38d4b962a9e1f9985133e3ce6d692d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-rc.2.tgz","fileCount":27,"unpackedSize":1701305,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhvF8PCRA9TVsSAnZWagAAp0gQAI4IzNhBvMGC9VxuX1l5\n0z+hrOIkUEJoaiOJ38Iqbbwhn7dAaaKVEEWII+hsLohDDS2Nlm5oue8Cd7f+\ng7hwUs6A1PW9men/4Ca1wznngkT/o9/dWDWyQ9SwGqwCMll7cQSzhXOX3aGI\nEm1wEPC5x4Vi+xgewM00QXiEQRwGrVylpoks/ZkqO6Vao0lBveGKsouWraLB\nDfF7/hLt744BfqWP+EGvkxtc4sWarU5blZ9R6ABC0KqzkUpFBE6KhcIVWI53\nk6bMbsadhWY/+ybeeQ0Zoa7J7trNWnMTQvF48oRLZt761bIuZQElxvOQZgCM\nUVBeWlfsAQrpAG8ySZ/ln8UpFDh/lTlAw/MNVgSxNY/gBPNE22d8N35w1OKV\nk5gzTY3oBYLx7IDE9GZPTGuU7Fcqso8Oks13XHAZ5eNYNNqtNfN/NPfi9xme\nY60gmCqyXj8osiP8gtdJSKbbh/UVSfHXEqOKrWfuOO+4VprZgNYR/sklKxEJ\n9CL/10OsiM7EAH/FfENNqqREuBmUh6RNaSdwaXtdEd6t6gfLCFT8qOQpluYT\npx1EEfEEltONOvI37mxRHyiL4WSVk705liR/8lP0//576fzeND+MOtuHEGa6\nFrxFULNMguvZSqMmkUg8wEXGJfpLPRnsKn+97t9Zt6GhuI++BXQ3VJ9/5Xiq\n5ieh\r\n=4Iho\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXpwLtUQASAAxH+mQdfSgRAqTDYB6xslfvaar6kRvMcgIgYw3FQCaMCGiuMXzLXnWzaTcxHAaKdaT42voWMrsFxaw="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-rc.2_1639735055307_0.10099725926993819"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-rc.3":{"name":"ipfs","version":"0.61.1-rc.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-rc.3+67a8c47f","ipfs-core":"^0.13.1-rc.3+67a8c47f","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-rc.3+67a8c47f","ipfs-client":"^0.7.6-rc.3+67a8c47f","ipfs-core-types":"^0.9.1-rc.3+67a8c47f","ipfs-http-client":"^55.0.1-rc.3+67a8c47f","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"67a8c47f7eb4ca93ea16defc24b1ebdcf4267971","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-rc.3","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-t5viBAPnyGc3fjLl8hlC1cLZp4l96mTx7Ucl4HIIfAE5zLIHPf6zCme9yBaLAKlwO4DSczAQ+AwoxcMuKUp1VA==","shasum":"abd89dc319545c958c715615c51e2d9bd266b46c","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-rc.3.tgz","fileCount":27,"unpackedSize":1702359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4HAOCRA9TVsSAnZWagAA+XEP/2JaNL9GF8RH6eUzjyCf\nXVJXoA5I+K4km7UTVbERiqtVq7+1t3RGLHf1PbtR7q04zyGU6USk14H3q/z1\n8DR420hHss6/8Sa1+SklvD+k7hOlLMJLLW8beGDXdyr+oX/m6lkgPBuYsE90\n4day9mpaRNGQglXLYPdooUjt7MmsRUQcYTy28bXZN9zUQT6Ai/MSmLI7WZSy\nRXNpDXu9cvbrHyQetLkvWv/RYycBlFCdlvcI/LX+JCmZV2mKXrT3rQ7IwsMP\n7sQPlOBuJaScA0Z+ybYFb0oCBzx9O70GUJJTUSdVEsHDR3p+pjjAcrCM7EP9\nI/uRphTPBou/kJV+pnfJOC4+7S0FosCqZyRmt5TTOfX/wHUgnFl+VMIzlpLB\nfT3B4407M+8P/rH5B7wGxY7IDXIaU2H0Gi1q4Mw204RM1PtDlTEDDvDDJr7m\nd8BVwK9TfyHMySNOrLgWjeGrJ+c8MyZXy8WFokDySZT1G62r2lTgwaJBY8JF\notlxOkCeRF4iUqvT7ZbImbouAqH98HAA48oegb7YvNdkgyyMgjtFhVp5Q7uL\nMEIHG3kEBl8vWQJI/txo3I5FKgOdC0/ff/OORh3BbCXfT+LFFQrk2+AHpW/c\n9s+C2IJ4LhNU79in3Xc5GCpMQuVSoDr8uoZSvgJuYEqnSJYv0nZaazXOZBRb\n8VBm\r\n=E2FJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVd3Ku1XuahD2MFmUE83p6J85IhWNs2R6Ifia5+Yt/YAiB/3+uOX1kCejTWvfIFoQHX+RMB2orkNyFGfTn1BAxlaA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-rc.3_1642098702732_0.16559353831658497"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-rc.4":{"name":"ipfs","version":"0.61.1-rc.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-rc.4+902e887e","ipfs-core":"^0.13.1-rc.4+902e887e","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-rc.4+902e887e","ipfs-client":"^0.7.6-rc.4+902e887e","ipfs-core-types":"^0.9.1-rc.4+902e887e","ipfs-http-client":"^55.0.1-rc.4+902e887e","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"902e887e1acac87f607324fa7cb5ad4b14aefcf3","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-rc.4","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-Opk6uO8iFmQqIzUVlI7XPlCcQxXGj3upfvMxWAnbzunYV0CR4L39dhbcTCc61+d9rHQjINL7SDNk/XWWVnhu+g==","shasum":"dd5ccfd4998082bfed60356e8a565edc5170b537","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-rc.4.tgz","fileCount":27,"unpackedSize":1704881,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6XEzCRA9TVsSAnZWagAAEfMQAJgfCYo+wQ8YLvdKQjNx\nPanh3G7WyU9OoEesM8ZXvR72p6rk54lyEExol8bujYsSAQ2Qz+rqGBNMiguq\n4eCPde/eRvpXI4pYOvmcPBrVSj9NSqgKy8bhygZchDxQ6yXDJHJc6nbkolxI\nALHQ7b7koPb0u1Y1uYuwgdGBtt/jB/a6U4FaqwzvoaODd5zGYWyx8K7zewZz\niO4asRT5yKedGyacOkwTSGRwcpAslfBiQzuUZmJ28xgn4SpwwJQDo3k0/2UL\nEMXuf6oqyPRuNs4nH6Hjza3jD7exVBUiuLMuFQhVU6DrM8KxAKavpV8O/IiY\n3xl5LP7RlphBoufqOgDgR2DJjuAIyh7ASyFbWclzKyaE9rs/OZzJbaGU+y0j\ncvhFBxuSCMHkLVTXH8XQaB2m0vV9wd0yrhNFGo7AQOPOqjB4eVDm5pNEk+3j\nCdWSfaK56sqQ8mFfBie62cSompY2PQYDeDHo0XOWW941maKnSwfI3NNaqiwz\nx7gEaQHbaRyc8CmLbId0AC7ejc/AIGhZIRDjT6F/EFoQFPdR3O66YiCuCtw3\ntcEVu3Au/J94NDMfit/MKC+Bd9b2EkntYygr8uqSvTMl0wNpMngmAXkS3mBB\nRB3gI/M/M3UPZ1Ca6rlkmHwkzZkvJE6g1c3wtVmjfZPXc7LCoiQRdPy6gZpl\nxLKz\r\n=9LH9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH5HQt8b9iS976NwHOPi3tfDZWHQSXVmSsn0N/iJsswJAiAKNbRruJpQyswGWxlKxUKEjeX2fhtfnvLbcVfOtGfsEA=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-rc.4_1642688818845_0.4301708612178252"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-rc.5":{"name":"ipfs","version":"0.61.1-rc.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-rc.5+b9382bc5","ipfs-core":"^0.13.1-rc.5+b9382bc5","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-rc.5+b9382bc5","ipfs-client":"^0.7.6-rc.5+b9382bc5","ipfs-core-types":"^0.9.1-rc.5+b9382bc5","ipfs-http-client":"^55.0.1-rc.5+b9382bc5","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=14.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b9382bc5bc7341a2771a69b2386e5473b507caf1","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-rc.5","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-Txx9gQKf0fnNVE7zywyZRhKzY6NRNM5xwnc/PZQDHIROq96CMekxM6gtwPprGorpw6yPlXuVRBRELv6L7c5VXA==","shasum":"e6bd040d5c799b7322d0f3943bf6ec2df5ecc2e2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-rc.5.tgz","fileCount":27,"unpackedSize":1855861,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6tVcCRA9TVsSAnZWagAApBcP/RxC/FZT48ajizKUyVLB\nMe5ioXCCOPhsIylAfBiPlzHQCZy/VVcewtuwen2tOOvMwlj8LrEWqXA/V+Sj\n5knh9JHp8JxwilrDmjVsh0dRBzCIff+fHeIogi9qNsYso+YRToOa8kbhpFmh\nOPGssCxvz4RB5SRuH+smTjW3qdeWpYyKb/3GfSu3a6c6Hzj6ynKzBX9oQbJx\nPT4WzGM5TaH9AxgmcXNQfPfxtnmA2c2KKXty7bl2XeGhmlrmEn40c4hpv87l\ndgFM2Kr5hRQAsE1iwnY4fIdlKG3ZSUaxQpsxhBrpMTIdgZ0B+GzO4pSeCrPF\nO/EsE1Scimq/+C5umuo+UtIht7GE0zpAsUU3UbwjWWmwjQ4hLfF7SaAZxFFu\nFNMZt85zK5tbnP46aYn23qW92kxItvtMPg37EAazgwIsdVkOfX871DGcgku8\nKBdeds2tL8RiG0bZKcpYdZ4tzBj55mj0ZN8HifB/lwO6uHLiaQ6STp5oQgBn\nnQRvxz7IWIBCqJbdg/1PzDXnTMJquqNSxvP5qLqw7xC2uK55dOXCRfEGCWjk\nV29LVMkWM1T48YFkUjMEOhCBToY7E20xWZzNDcWUzCG8GcPWlQs8ER3wOvSb\n1SSb4xYdrOWt0wNxdywrvlmZl3bTmzhmhrRyvQiw3McM++KdGLFEKwzmDwYd\noIQj\r\n=JhEw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDC6ankgVVV7fuSl6JpxJX15WxBsnucSsj4HPOXNMGUgQIgNLsRPx7PMD7pyConHHEDNkxg0HtvP475/dMqWs7xvBw="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-rc.5_1642779996286_0.6649812567098838"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-7fe0da57f.0":{"name":"ipfs","version":"0.61.1-7fe0da57f.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-7fe0da57f.0","ipfs-core":"^0.13.1-7fe0da57f.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-7fe0da57f.0","ipfs-client":"^0.7.6-7fe0da57f.0","ipfs-core-types":"^0.9.1-7fe0da57f.0","ipfs-http-client":"^55.0.1-7fe0da57f.0","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-7fe0da57f.0","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-RRgj2ZImdFgQm7SpEMg1hjE0EVIe11eAJYo5BEXYE67EzxaLG17wcn1q4D0sawOL42qBTVjkwIY0W59I3MMsWQ==","shasum":"cfbd515e6a9fba4cfd5208fde7c57b207fb73f48","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-7fe0da57f.0.tgz","fileCount":27,"unpackedSize":1855588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8Tt3CRA9TVsSAnZWagAAG8AP/jHd9gC6zY2tZPZUWciq\nC6d+Fn/yLiw3xzGQMxPIwf2ZRav8sT9sDNldYAwxYhlD/HL5Haqgala0mPBG\nKzs91s2GXvkzpM7ezvg3j9pD5bLSFVKDT63/EypteFirLmNUDsn3X4GJ7VtZ\nab+1uxcuunK9LcZN+dM1selM9l71mr6uWmQCsiuPwYFHoVGzLRHYo/uBBXVL\nl1VvsEbKekBgg9Rw7YjHtbc6tY9Nix3XsQ9bp88Np9VFhbPFSVxfYTHJVN9J\niOdA9cJCfHekLdP/goXUbLE/Gel8RX5x+6Lqbg4paL8G0agp0nu9jH8i5kFh\nk9t5C2Y5X3W0Igt3LMYqAZoZCsROfYOz4x3DEwv22OXMoc7CoZlqJb3hQIKn\nBKX9lg5zntfCFytpP0jd4Zg3ZvJAjHEhiIe4oG+RZDO5h6Ql/S+FuC57luHd\nRrfMahe9d0JxXSUWyFXoHSloma2UKiM+NDnoldFIhz5o1SbpZut11vMm/3eS\nOisWcy8MOZeDU8uIBEpiG0gE+C02W7BAMe9ZZXzF3R52FhkePnXPctgpXy3M\nB1B4BJgDsThXDsVJ7Qjb6Fmag8wDrhsOAEbyuu8pdvnSEvCCsc1tO+ZO8Dri\nSRp+WLS+sQC2N0FYZAJ62CiVgL6r/bWgbHhUEVTQrVldbvNqDI/SfqBpZvJv\nSQ52\r\n=h8Sn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfwu6UBvDBWkOi5NGHdOq1V1IzafTSjNj4nVR8JsaBMgIhALpkBMGf23HLWp/RcAGxraUKqLdeMwWTwbScikMLSvIw"}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-7fe0da57f.0_1643199351160_0.21406146588479125"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-5439a0e.0":{"name":"ipfs","version":"0.61.1-5439a0e.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-5439a0e.0","ipfs-core":"^0.13.1-5439a0e.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-5439a0e.0","ipfs-client":"^0.7.6-5439a0e.0","ipfs-core-types":"^0.9.1-5439a0e.0","ipfs-http-client":"^55.0.1-5439a0e.0","ipfs-interop":"^8.0.0","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Lead Maintainer <!-- omit in toc -->\n\n[Alex Potsides](http://github.com/achingbrain)\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-5439a0e.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-36GC7piN4o/jp+TzYY1yAZK9/YoabN1XIPzOYKKKSkSOR3z0j2uNZSAt+asqG41VdSvbPCpv1pyP7UUc12+kNw==","shasum":"10271269785015c3088fc3f70b071eec81c501a5","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-5439a0e.0.tgz","fileCount":27,"unpackedSize":1855648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8UetCRA9TVsSAnZWagAA6IoP/RX3k0amRn+E1PQC51cu\n8KaYvrDD9N+6WG7ZM8nE4LZYXsn26hADeGitgXLMNPWk2DlHtAgtxQTpxqPu\nsYUdxe4qTGydqJ+2rSMYKJRpSLO7QASMMpQv2zh7k2umpUJKaHj5kOzX0i7H\nWlyekCmkOFyvkmUDah+uIm37Hz2QVBZGGGTEylryEjaSChQ1C1k6jEEKh+uk\nMJv7w1xK9G/NvghyXmMEiYHB7wg3X6eYFCK5vohD3Agu8vEJG5i/XExqUawi\n4osZw8+sQ6kZcPC00KKJO4YwEST0/jqurJNoXyjpBNXE04VuP62b7aqfbw7C\ngEHXAn6bu70XSu9ik/6G7ZutP68PQqAGzSwwEDnjstUy49h0TjGS98R4mb00\n+JNEHAFVyZ9P4JuawEfzeCQ4EmKUydhJbhSGTvf+Cl+0FY27zglULBMlz6iM\nLM7sV15988ehQeoO7JyxSneaabB9tcGJXy3cD/y343ndV9J+nTHmfaDR7Wc4\nui0EGIJedFmgp/D9XztUlbLESBXuAvtOy+eNmuUFeARfrmA6ib4Fv+t81ppO\nI9oPn6zKJ+ft9L0il+kQ2z1FI7GSrIfwx7G21PLcFomV1JXrFZNtchtgzGEY\nNmSJiYkdnw1pRKTs66qP7bpsFntFvhfaJ9iLhDL87IDD/YkOmkxJqgEgV0JU\nu4sz\r\n=70nU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHp95yM5bpwBXyYI3LxiDOV5aj0iCOZJmb4K7BG2tL+gIhAJEo2ldfRTce5QvVJdEGvvsneFfdAftwsHVNDqIutD/n"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-5439a0e.0_1643202477657_0.15893510280565715"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-a6b201af.0":{"name":"ipfs","version":"0.61.1-a6b201af.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-a6b201af.0","ipfs-core":"^0.13.1-a6b201af.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-a6b201af.0","ipfs-client":"^0.7.6-a6b201af.0","ipfs-core-types":"^0.9.1-a6b201af.0","ipfs-http-client":"^55.0.1-a6b201af.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-a6b201af.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-34sshqfw/cmCDFHSHw9JqpaHyXRyUWsmKYFHhFku12b10WdXfLIO/Xq6Qy9VZuEGRFSFJxdgtEuRSMxg/hL/9g==","shasum":"b3425ae886bb89de5e46e42eb8f06ab205e2e20f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-a6b201af.0.tgz","fileCount":27,"unpackedSize":1741145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8rxLCRA9TVsSAnZWagAAK7QP/2WNRmimkGxCjoQsFWoh\nl3dI5ai1HIhHwD1YBxuEB3iZAcjqrntc14o6SeLLHOfEpLpsOb0XUO4Y7S4n\ntsk93J5bYqB6SawJ5yHf3ZpRvTdTSBeDlPBjzlBijr0p4lflun8c63mZKOOk\nMt7rY8dfZnJESOB1nOzTAqLdyKLMIEk8L0FPNgh5NK45iT7zIslRhHx5e5bF\nPw50wI0zYEJTQe7kAkj7JDKypLSDYUoKTKn8u9Mbyoxp3mzpthm7kDXuFrdL\nA/GDaj6dVF5DxzbyvK/kgq+egmxRvczga9ZUa2ezWfUrsMFRc4lFzYTyeD1b\nYnZGDzaASSC612I2LPve7VZfO396swvvRJdpCYJGcxfpdeOc2k5Niacy9cCx\nC52cSvB7UpZXLE/KbFgz66v7BUawo863wLWVKSEjduIKWAyK/KZgt9j/PsJF\nNxo9ui+1xbAs4GPR87d8CMJgdxClInUrtVWCn9CxrklX7/jiO9FsxEHLuQ/8\nLpQYHuAVAIpRbW/p85DcgWIwu5NKGvH9PmmyjtvuwgfxVYrdgZ5Hx0Fsn4mM\nWnP18mNxCeOB34fJLiGB3NdrM4l8dtLKT07MuHXQqXqnoixwC8YdKFoGw9o5\nBeZR8x+AEYHCqEcr9CJZpWunETe2Ax4wBEkdyiMH6NjYrlTEiEebXWoImuTp\nQBx+\r\n=H/aV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHn//XbB0MNIG6ajqwYIvnDC6xYxl4jXf0PcoBIhfvqNAiA/tjirpY0pq7kVA2Tg6LZgSK6cRd4AsrihK7mUaRCECQ=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-a6b201af.0_1643297867035_0.030563129100304565"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-fbe14923.0":{"name":"ipfs","version":"0.61.1-fbe14923.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-fbe14923.0","ipfs-core":"^0.13.1-fbe14923.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-fbe14923.0","ipfs-client":"^0.7.6-fbe14923.0","ipfs-core-types":"^0.9.1-fbe14923.0","ipfs-http-client":"^55.0.1-fbe14923.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-fbe14923.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-Ob/5fgbWquR0Y5lRHPD6b1EACkt1YaW2cNTIMFJt/7vn2HGOyqm4biwikQS3gosHOK77y+v+TQsQtwTRM6ZAnA==","shasum":"35b42517654429c458fdac95e129652a6d89dbe3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-fbe14923.0.tgz","fileCount":27,"unpackedSize":1747585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8uHRCRA9TVsSAnZWagAADFEP+QDenNu11nXaU7dTpd8L\n2IfcFKdej0DNuHA+yZC3HjM/ztvw/hjycgFOLyNMx4uZ53hZwjhtqeawATwl\nz8rjbmonguA/fRAoT+wGrnA9tSO8MsvmTKsGh6HvcgDmGdsMJEjzIrFR75cG\nHaHQYITStAe7e4gyLWarBF1K+oF1hpeNXNmJFrI2VFdlhvbqE4ccZk3kUJvH\nNwJKaR0vP/Kex4fcDcoc1lPhCXcMu6hIslxA8WcrYkDwNZKVBvnfnggMNlmq\nvrtY9HrEiZysTngzD2/cK629u614KfH0N/tIqJCZnriGvrbzuiMdiKswuFIg\nAi1Zea8T09Mk9A6yxKCGlWX57rZAIX+S1niU9AhxcqfmFvNgbob1nmtYxSAB\nLurj2Ts1z3aKiUlo1G0NusIWK3nd/9Xs28XAPSvXER0cf7yXrkFoU+gKBfNQ\nE013jvKStO7CYhPG3gLmEjc0fSJ7n7AYQ3YUGr8D/bpftpAtrIzSL7UUinb+\nhiCOtQk5YrOkEzJXgQtLDBbpuzbW15zclu5t3zy80uUT1Ho48HjQYaN9qyyW\nt3x08qe38l+TDfTECY2W+/cX7FZp4M7LjjIKRmAaAOpy+SwgEhPK2tF1Qd7B\nnI5shA4837O41MzND1PcVkvsJ/Iptf+ekfb7zbisEPF0z1X7Xl+LvfAt1WTK\nY9m2\r\n=Dx6c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNmOcZYq9COLnv0Fo8gnjZlbwrmvsOoJS8c6Hh86vi1wIhANXCRhe3H0QCxrI2BAxR5PkR6XfAiYibJCLuVvgka8yl"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-fbe14923.0_1643307473658_0.5177096245655937"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-6cb3a87e.0":{"name":"ipfs","version":"0.61.1-6cb3a87e.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-6cb3a87e.0","ipfs-core":"^0.13.1-6cb3a87e.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-6cb3a87e.0","ipfs-client":"^0.7.6-6cb3a87e.0","ipfs-core-types":"^0.9.1-6cb3a87e.0","ipfs-http-client":"^55.0.1-6cb3a87e.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-6cb3a87e.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-T5/1rNtARUvYFtt7zFZHXsjBZpJnxCBn4z698nAMlSgBi+OVXVlPrN9EH8N4+ESWz3/7wc9S3VOtjiNJjUNlig==","shasum":"72a61852c1015df32e95f9408d2e82d3c26229f2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-6cb3a87e.0.tgz","fileCount":27,"unpackedSize":1747585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8u7ACRA9TVsSAnZWagAAnBwP/R7R0a6NvryB293byOkv\n0/NvymjO9yafgQ90nRhcQQN2mRRx+73TpvMdjQ05i+hIAw/8ob3AJ+74cXU7\nG8QAZSrdeqxXQ//A/L+6p9IRZUzmM0iiVwmKACVpxtZVhTkGGrVnlxC/il/g\nZADD/3gLVdxH8haeq9jVb0NKelKRkY69CZaCsxkBpzatQvjKtHSNmKoYt613\nNYjaF4UEtdjUj7WI4LHh1tKoEaTm7EDqGEbJWSvVwOHwVz04vL1evyEcSvYy\ntyUP5+bFbRWbva4mM7KgZClMpSRoPAlIEboqJwmoyrrwAS4TRFmOMIJkU3pz\nwOsK9JxN0ZKBQfv9MqvNQlU4f3ak/mMl4F/O4KEGzlvNNMo+SSxcZufHntLF\nrD71WfJqhZCx5Ov3nTBoGKo1nfua4UbrPcLVcLA/ZpQFCJrT8fTukHj17exH\nRLyRFMBKq3qd2dV1cwiEs2BxbGJ7MPRYXylqYcNCVHluqRHEjkJOkdiYQlsq\nhjrA/I7AJ63uL9Hlhce1tRTEodrV69WXZhyHHg2ZNfN1MS42O1hMNWNdusnE\nA0N9qs2HMNyyjiE4fftCxwRiNriF6xMs0x/j4Q/nfO46iYua3XXozso4MMQK\nz2AYW+WusqvHEXhtWFH8tQx3UoUyP9KhS5R3ozZhho5td0KXw8k6K91IfR2R\n9qZP\r\n=B8pF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmP/T+GPgfY79LRWnA69nLXzwjz8sVUFkSkCCAt7ZhBwIhAOS277/SxRgr+sqDi1xs3muGNMbSOxrolfrqL5QKomwv"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-6cb3a87e.0_1643310784293_0.9727032004698126"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-2afef2eb.0":{"name":"ipfs","version":"0.62.1-2afef2eb.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","leadMaintainer":"Alex Potsides <alex@achingbrain.net>","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-2afef2eb.0","ipfs-core":"^0.14.1-2afef2eb.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-2afef2eb.0","ipfs-client":"^0.7.7-2afef2eb.0","ipfs-core-types":"^0.10.1-2afef2eb.0","ipfs-http-client":"^56.0.1-2afef2eb.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-2afef2eb.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-gf8Kq895PSvhMzX0hxbPLx5c7aTOPDAukvYHbdgt63wGQD2E2/Cuhyflf5jY7McbPZu1ATpO3okVdFUCo4hSZg==","shasum":"e9f748b32388966f3ff72098b2ecc7ef57a38fbf","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-2afef2eb.0.tgz","fileCount":27,"unpackedSize":1747586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8vv1CRA9TVsSAnZWagAA5AcP/3rCFbl2DfZmtBb9CxkN\n8R62EBTBtCt/kp56Na+NiD0cKeoQxfl8X9RotLjl8ksX24KQN0j38UHLjfdt\nEJNh5dNBRbvUjPPM1wYVl/LTSkrdHjLKXR69sBoNwNqcBNysuHvaKkNKZAOr\ne96StqeaqZQv3VaeszBzzP3UaydGwkh0gZ5x/NhS6SvX8EHReHcSlhlTXUoW\nJ02X8ovkKLqQ6+BsiilRHLszZye1PE+KYXbh1PXdqZGfh7CLuMEhyURF8GL8\nQHNaXuSlJCeVg9/P8JHoNMzB3KGTNSn773ETXiOk+xDzZ6dbvSTekX66f2d/\nuzJh/wHMT/EVxh1nz8XS12VaNtWhaVGninigbfWOTEq/DJMZ4FttC2pbedwD\n7dQCgrl7f/yYmhRn8B1KjozlHV4vIqtHH2yrTCxAossLaFSemAC08GBZjYOh\nQ4UZBWTshBslFBGf92Jrx+OrUkkjQJ4sKdEDfZFHFqrFpF1xCbKFzs4H7akc\nY5rAQfVG/beKMt89GPCjA1ji+lXhd0XO32SeVUUYEiElRvXomPzdnv8RoJvD\nQrjQoxOy4ABNHT4dZVsOFwDsynK9/YYWFpt8IKMbXXVB68X3Hfkn9E1eHGQe\naADwo4g84Cbs8ZcJ3oHDLM6agIKHtlng0mQrP0fSdGyYw6CUsg1KFo0XO1bS\noKkW\r\n=t5HF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8VnHCBLOamyny1ZHvoC6yG02EqB9NTTsuzr+/k5/yRAiBYNWOH3UlxdrhUfbaT1PdDwH8NVYQiBT7pSrCSXEPY3g=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-2afef2eb.0_1643314165365_0.04341920616649175"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-3a5d61d4.0":{"name":"ipfs","version":"0.62.1-3a5d61d4.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-3a5d61d4.0","ipfs-core":"^0.14.1-3a5d61d4.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-3a5d61d4.0","ipfs-client":"^0.7.7-3a5d61d4.0","ipfs-core-types":"^0.10.1-3a5d61d4.0","ipfs-http-client":"^56.0.1-3a5d61d4.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-3a5d61d4.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-KdJS9GBksPnpDNBQHdsGcB8ZQWwemPaIT5x7tDsk2MCIRk4+d5U/UI7n8fvC5M5o0W+Q1SXPt6aIvY2R4uxpzg==","shasum":"dd414354c20c885fa1244e0b578b17ba53a49101","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-3a5d61d4.0.tgz","fileCount":27,"unpackedSize":1747526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8w/JCRA9TVsSAnZWagAAPHgP/j3mrh/I+/krDaMVRTDO\n0Nf7VguHvGtaklvdDiYvvdJ1T0zRKfdpy8kYhBXUsRMAIB/QqSBEljqU6wHh\nqm6nHbgGBGoOOCKPkupo4AtXxKArneEwVtD/FJTuBH4aUUDeyyroB0z7kR+Q\njKR52jKQgz3n7kzgMZmJIhMZt7RtxGXBjIYyLeyWfajx9/P+vaVqSduTreKI\n8245Ug3z8JdqOuOhLjNgzaLjMQWwXv+Oe6cw8ud/qnMCG6KfP27PnUNEWhBd\nsAXaKLcppXHpfG4Jmejmjb2UHUZcMp9xO/hIVSuWMTza3P4elXH2Yffdm4hI\nXxOHbq57iQWQtyRJD3Y2bbi/qAmxjA1BD9HgMnvAdf7qUrET8yinPRBM8L7Q\njk09Dpvqqm5+mnqvJEeCWJo2TMYt7mr85MKEj+QesUuKHRHLgmyR1FysDoCf\nmKX6hzDwXiLNhqD1b/xCJqlApBJRSZE+bJX1W2WMcW9KVljiwhM4Pxc3L5vW\n5RbqNm/NzoAgeo2E0wpLOiB9OBnsSfSodHyLSZKoV/hObjcNpix3iBVSvQhF\n57pxC1xlO94X/x/gfJje491gYhtbDbKCIqZCwhBSLnSdGdY1sjXkKyhLKbhW\nr7kC6s6koSz4rYuZHgC3sQRJjnQHx8k75C3rt8G39J2v44/0gq+rkooFXhpC\nFsNf\r\n=RSG5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERLof1O29m0BVWy01vfwlMyv3/VQsu75b+C6WQa9/VpAiANYL0R9yOhWsz8JW5M9qLl8ytMpISd+ePJcs9TLyQVyg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-3a5d61d4.0_1643319241186_0.32855233342091283"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.61.1-cca6e321.0":{"name":"ipfs","version":"0.61.1-cca6e321.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.11.1-cca6e321.0","ipfs-core":"^0.13.1-cca6e321.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.153.1-cca6e321.0","ipfs-client":"^0.7.6-cca6e321.0","ipfs-core-types":"^0.9.1-cca6e321.0","ipfs-http-client":"^55.0.1-cca6e321.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.61.1-cca6e321.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-iJewPvRXIstpBPCV8h4zWYA3wHtBbeIXeBVjh/zIFXCDg/4iISNlnvDD3lJj3X8lnCJnAvhdTxQ/r/SQaUwFRw==","shasum":"a81d1960bbfdaeb78a2ab171bd273898aa5f28a9","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.61.1-cca6e321.0.tgz","fileCount":27,"unpackedSize":1747525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8yToCRA9TVsSAnZWagAAvlYP/iLrCmD7nywjx32YNlZx\n1ZvWrDU1QP/MqPkdkLJqyjC/DLcwEqziZZPRCE7lwRM6w0PgyQLqgPeNDfvO\nTT6nPtOJ6m9pR8E/kYhshO/gKm8QcB7BiLPz02HaCKQmAjCFvkxYDVKjkRy0\npMyccDDISUNB1u+oTYnkQ52vK4v5I87dM5ilJ3zgjIFXDb5QqvtoDnvlaJdO\nxdKLGoHLIf34uZiIh9jCT2+vg7VgWEnWYLIgf8lgYxvTeJ4LxsR2KBMQp3MK\ndxOqMQOnYrk97N5ozi0ioQ0HYcRIeJqKo15fnhaRhx10mcZerEvIIPBWiQx5\nIE4eDnIFV9v+/PGXgPhv9dPKTjjHpDM+w0SRpLVuPsysa1btYYzD0vkShOTA\nuycGXHfoGwMHPXDDKi3N6CLkylRx/lV3btvlrLkSYBufQV3eNt1FtBxAPf17\nN+RYzDCyB5SI48qQjY31yB0MxItL+iND7x0Zn0VFgfV7YBpTWdJb2+eaEv5w\nWE0D4Fd+mpu0C+bm78JyHSpv91HGnX3Yiitll6455zxGfVoVKPbEzK4qyhE2\n2nMAyP9L4wS6o5mh6aqxrKOhFulfUxGHAblaQfYY6obYrw7FgSxyxlJ7b9gz\n7iaJNf6AZ8TkJs3NeC7jigxztfKu38aa3Q7B0wDRsrlwSpiFXruej2pVP59P\nbEud\r\n=906+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGiFvemg0JcFSYC4rlLVbVZMo+0YGSubvTm5sFo+iNB0AiAcQ/XJrDJ2+GjgYKniEkkDknmAyft9CP5n+UzMtJbw+A=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.61.1-cca6e321.0_1643324648420_0.634924966332487"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.0":{"name":"ipfs","version":"0.62.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.0","ipfs-core":"^0.14.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.0","ipfs-client":"^0.7.6","ipfs-core-types":"^0.10.0","ipfs-http-client":"^56.0.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"_id":"ipfs@0.62.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-XG5a++2tuFVXxQ3DAre9CXhbuO0EnHFrNbZenWITtDafoWvWw/wkzNcEps5+dsLNk7pHFs58Y9HzymWUoRDaGg==","shasum":"0ed524ba4bf6dc2ea736dc3e8fe4a0a022202015","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.0.tgz","fileCount":27,"unpackedSize":1747405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8yg7CRA9TVsSAnZWagAAbbIP/08SIYBA73KGpUwukI6x\nPaH0KygdiIrbgrOW+9tbclbhxb04qdOa3qz0EZozYOKI9Y5s96/2ms+dEFFa\n5gCgNSJBwoULOdXhADd+LOIXkPpZO7shnnGUb6r+R7IrUiCe1UHryvavM2kk\nrmsiFQtTS7XiuZgHKWkBbJGi07gYM4BUiWe2W5uroy8oAssd09XWNI0f5Djg\n6ybx7CiaN7rDQCKJesEryTxVoJfmhvp712T138kwMayD3rcTpEORRRTnryG7\nMSJ5IR/lFw1/SqtpmTaXtjz0azrNdRv/8D2I2TCe5QJoPjZB/BltzGzPZaaq\nGvzCnvgJ2ooQeLMP1coAs9RFxFPMapMUmMUZC7z91m5SHShhsN9sYuY/wZNx\nMAdOdEXv/3+kxby9p7XUT7KG8amJsdSgL4H02UpkGMgFd9Ul9oYDRl78ORCY\nBOOiGQ1wr0p2DGpZ7WMUnqFX8ZOwIzihWBSQfz81a0fZLWfGo9Qke1e9SEvY\n6M4p2XMbbLkBUVQpkLcEluIjv74vFVe2VOHB4/79oEv9OEPNU1TFjw0Jylgx\ndGy7OBl8Ibz8LDpk/cIL31W4CapBwlzBqdULHdrHeu1B6IGR8tC1O3ZLjR0s\njI7/sgRkW7+r86H/XqdFZPHhX+t7jhCyQ57OJU396ZjlHbLTCWzU33DjnXE9\nLDgw\r\n=AB+d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGqkPZ3MpCyXKbcx2hdQCMhY/bcXRvw+cAupo4f/9MdlAiAGCkD0tk4QsaJw9jbXuvMhPqRHqntkWyuXrqXbeh0ayg=="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.0_1643325498756_0.4579612881691575"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-8d260215.0":{"name":"ipfs","version":"0.62.1-8d260215.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-8d260215.0","ipfs-core":"^0.14.1-8d260215.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-8d260215.0","ipfs-client":"^0.7.7-8d260215.0","ipfs-core-types":"^0.10.1-8d260215.0","ipfs-http-client":"^56.0.1-8d260215.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-8d260215.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-bIIWfABj8axElwk70+2jWwVFa4piYmi4+KiKBDgIrpRHamZz0S6BLXFEtutFOjbIFAffkISFHRHa0JTf6WpxvQ==","shasum":"8761660ddf67aff3863ba8ed81059b529a9ef2ce","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-8d260215.0.tgz","fileCount":27,"unpackedSize":1747526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8zB4CRA9TVsSAnZWagAA+FUP+QEVDjTyhadP873GhZD/\nitbdf7j/p8EkDvhpNGAD8vUugNh/050vsdMTptC6F736VdA8WyOUT9lYLPEP\nBDsbfPCIApC05MICiaMq+LjT5ixZdITZQmI+uxhWINzAA9gAW3GxiQ8jkxBx\nRqvHk/CDAUcGGGzqQNiLR+93hIlQvI4wmhl2qpQoFi25FJ8Feh3UJlO5RyXS\n7id4bILuD1j/HgJ3lhtG5iwTLhxd2IshibDN6l783LosoE0738+ct9dG5GaM\nPz9Rgiv5eodNAnNrsdPxlrU9cMsSjL/A7zP7zdcg+9c3rziVhNlIpnxags3A\nDhUi/Am/EnOU6NmP1QdXrdYfez7AEJluKx48LLV+eP6f9thzqGwtbPkMZvsi\nyH802n8jSC1mibo4ls1Pbpbx2k4UxzqeJtbfwKm6ogged2PGHRBcus2RWn2S\nh0mdNcNR9QUbRoq5ITH0/i76+tcKKY4E7+Z/hfB2YqFp/iPhJS4qq4u1tcRP\nJkpNbq1E/zesheohf+VN34RpK172q4/dwsQ3F5i4M3Tt3kDaSTfyB/9lIV5g\n/EAwc/dxLGQf9OX1Z1oaX26AByO2NiCi/6kbfXw78700KItT4IW+KQjLmZe6\n9ETqNgc91dy9g69pJnKLvYLhXlOxrgQOwXwx2JgdB0/E1fHl7DhkxReJPRrF\n0R3g\r\n=QlHO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/2D+4Q8cwx+K6/Dp50ziAS70K1RUaTS3ebnB83pxNsAiEAxexmZtLuiNZZHK1dNRYPJfa+YfMh5E5my494zJ3s3TE="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-8d260215.0_1643327608075_0.259963071629566"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-2c8ec080.0":{"name":"ipfs","version":"0.62.1-2c8ec080.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-2c8ec080.0","ipfs-core":"^0.14.1-2c8ec080.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-2c8ec080.0","ipfs-client":"^0.7.7-2c8ec080.0","ipfs-core-types":"^0.10.1-2c8ec080.0","ipfs-http-client":"^56.0.1-2c8ec080.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-2c8ec080.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-hsQ1pcf9JLKv6c0FToSgoWVONM952EpeY85+U94LIXGN44Bh2r3TviBWzoHw5y8C/LQRvrCIJQX0uqT77qjZEQ==","shasum":"be2c8a20da6499bce4edd6b22dd6001ba70f1917","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-2c8ec080.0.tgz","fileCount":27,"unpackedSize":1747802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9AQtCRA9TVsSAnZWagAA5YIQAJKE1TxfbOV89gVgnlVK\nLNHm3PT37e8lfWH54QNnGXV2+uAKz8GssjI6amD/7eTXQqwXB06m6TUUqAgf\n3jc8/SPn/zMywR3IIrc17uSif7s0TtJaeDpkeY9D0SBtng8JRNWS8LeXfa0l\nE+J0+MIQ07bNFygVoN3PCS+ZbSf9eVM+KXKIuKirpkVkrV0PBm4KD78UVaQp\nubGWlMxeJdXPqPlboL/8hW7rsNzSOUFSkc46q32LQBBo3SquhoOEBzXPXpJN\nT8HpC0A/GrjQuCaemrEhyynC01a4jjozcxdDzX33CnpT0jmtJuFUb2TX/p4B\nSV1zhFjLAjV1ZDeB8z38PaWyUiogJXnKzM2RFCBPgJTYu3cEtRQBouAqagwy\nQonuQlCBdJdOK6TB2cZYIi35vT3044kzQ/vCdGJGo10taWk+l8JeeQQQHq/C\n7T/yCot/QvxJOb8nySso/BgLibMP2be+zfQ6SY45wS21n59NCrd/ZnOyDwZi\nuDBU7K2YrBDGUBDofLf4Y3QLGFZ+p+Fwqw0kwKfUP5/kpQw5enEdpjwXX+sR\nG/Avk3E7klKNO9mU9poyj0A0z4nsmAUvxvEhWhlyJFPaOXap47PZ4ECkrogb\nR4BMP0KjfIP+jmHCP3bqo8C4p1fyi6pihjzOc1IkFYHRy4dIVXdanj/yr1zQ\nLAwY\r\n=tOCN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlWFo5GbMjiv6FSJ6dKmWLjiLZOLLECfkZdAG089w93QIgSA1/bKe/RHSzJvuRM8ZnDTmckZY+rf9HL9pz2JbpyAA="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-2c8ec080.0_1643381805060_0.47888526634072703"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-3a74c110.0":{"name":"ipfs","version":"0.62.1-3a74c110.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-3a74c110.0","ipfs-core":"^0.14.1-3a74c110.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-3a74c110.0","ipfs-client":"^0.7.7-3a74c110.0","ipfs-core-types":"^0.10.1-3a74c110.0","ipfs-http-client":"^56.0.1-3a74c110.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-3a74c110.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-CL/KZPEI3B8dkSuivA4X9OhRw3/U0TADRiTryomEoJ3tQv1TbnewXcER4jQMFB8LrgwsyLv579DHy9x1EEdA/w==","shasum":"cd3aa33414f5adea5074067756e196aa9185eefe","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-3a74c110.0.tgz","fileCount":27,"unpackedSize":1748545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/VGbCRA9TVsSAnZWagAA3DAQAJasBdPZYfSoHJJbYnZB\nvshVVMO6AHPoh7cDpolV7urLEwyZ2vZOa3SkhVj28EBIqzDZ9VwH4N0kjoyA\nrqLEnc5kuW6y4uR3XVwqzOZ/wrsgJBQqa2l87f/pn1TfzatDVSrVzgaj5iTX\nF1kil97hAQtwP7PpGUYsLHhjtSAjMuOPKHT+wegDMGGEk5H7V98Se65vw8yu\nPilr1giFU5vsOHQFBeJucqX4DKyfMuaOupRDsVyt2b9/qOiJvfRX0n9gXDrM\nXsinmQFFCdVXjn1tIh+/83y2Wfb/TccuA/ZaLDiDPk+Y6aiE6jP66bdWOpwO\n71+JalcRQjLvYpUFvif89eCbjgLzmM4f64qAXdLORuan3LSnRlZ2JlPy38y+\nr2qraBXmLfT/KkaUr3CdtEvRualkV4TXYW/zAMkrK7ms0HTttsA7cAtEnM6S\nZRoc9i9NrGY4f2gjVDcqnJAoLIVmv0CitA/EesQm1XqbO9zHzB8G9NwyddKZ\nqqnElqSvZG3rMXgqlrDto/ylsGf83gP3pRA9LuGP78vynvV0nsyB/iZyFpqx\nAdp4qz6r5Hjz6vBrsFOja39+CCn3QT6FJy+2CWblWGwC7zaGK2tTyAwkzYK4\ndgCMZALoyYPPZh9UgGgZjKE7/k+u6njvwLA0/zLAKPmBAzB28v9mWfHjVpAj\nEAdX\r\n=23yg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAah42Dd0k+sXsdMIhr5JQBVmtizd7hM4aBbel/+fVm7AiEAhd2Tkg/gcOCRRAqVJuTVC+/kfabaT4Wd1LwymVJghF4="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-3a74c110.0_1643991451244_0.15476191507260828"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-383dc07d.0":{"name":"ipfs","version":"0.62.1-383dc07d.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-383dc07d.0","ipfs-core":"^0.14.1-383dc07d.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-383dc07d.0","ipfs-client":"^0.7.7-383dc07d.0","ipfs-core-types":"^0.10.1-383dc07d.0","ipfs-http-client":"^56.0.1-383dc07d.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-383dc07d.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-ocI5PGpgF5yArVMF5ivKOMIv7dj5admIBmRISukKsTDQK+3kLyJ5hLy9N1s8vp96dtXN1QNKyuXA8Vepz+HrSw==","shasum":"f886cba9601e034db4ffad9750eb277ea6fede92","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-383dc07d.0.tgz","fileCount":27,"unpackedSize":1748545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/YUxCRA9TVsSAnZWagAAlHoQAKDjEKxToTTl70aoonKE\nQwimpP4k63oNgrQF+W6e6XmToNBmUjn754hIpJ6iMxLsJEuuH1ZbQTD+Mw6X\nsG+RXACMN/VVj5Xo6DX5g/edEgwcEcOP8EYvEsRKaAfFB4YRM8AKIa7OyIQj\ni0djKXfm7kAznRVZSfUE2NsnHE7NM8IP7LfwK/7tODQPcLJdBa7NBpdWkLO9\nJILDZk2J/EZGvMrFSA3EhDq6OIpAMy8ZRBE26MIFkBw7AoBow+kpjhaB05/g\naGAWp7V8LhrKy0nYCmj4xRaeoqiyqZlIRVcvhGRJCHy76qX0jvidOtg80N1v\nY4SqN0z1ccqtWo61+hOZUJPmYcynSsDnn99YunLWyDuZXySUW+1MO+pr8wD3\n/NPqBDWrspOBuD8QdN6jMQpHPf/Fp2dbV4XeBMlFakpko4rXs4fc86dwOCM/\nOh7wFWK8eFq5SsDR/gKr3xJNslqiUhRwP4sDE4pVjS5B8cgW6K3/F/xj81v+\nYo8BlZsm7w+WBC4IAB0jttok0AqQH5pCDNlNEMVwxBkvBVnheDDU5n8Wepwh\naaM15nBA+FDTsXAjzlDfrJTqYC9k1wL15Ky3hB9pjq5WHRIlJAVbXKZ3cpla\n7Xye4D9aZTPgVvcpKFCTgyfr/NabuVxX907cBha2p2TmNTvBT/GeyRyfT6+I\nmuut\r\n=KZh6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDza61YBnqWwC1tPoruoEG0fo+stvcnC9BxGbxa8VdpNwIgK63b6S1tQ6JPeK9IcD2W19U2QX/cBUNZ7dFxBA2QAU0="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-383dc07d.0_1644004656867_0.38225288752325937"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1-709831f6.0":{"name":"ipfs","version":"0.62.1-709831f6.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1-709831f6.0","ipfs-core":"^0.14.1-709831f6.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1-709831f6.0","ipfs-client":"^0.7.7-709831f6.0","ipfs-core-types":"^0.10.1-709831f6.0","ipfs-http-client":"^56.0.1-709831f6.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.1-709831f6.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-YV9AYtm4huZUWAnAu4iaVMfYOp5AaFDY8FIRcxoj7PGGG+BkJL5pu0CM/X4LAh+sYBjU0QOTzr/aY8umDUSEKA==","shasum":"78f70011f7ef25f0a4358085a502c9845a5bff69","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1-709831f6.0.tgz","fileCount":27,"unpackedSize":1748661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh//FiCRA9TVsSAnZWagAAxz8P/2E5POlgI3LCqTTg0LAD\n0Gmu+L5VFedxDHHIk9gKlDhgi1uhhkSEqKl1uA51FoKSS5AtjcyLep0hP1Bm\naJzokhahWzzNMhUv2JeAIJANELPYqU+8b+NquoORPxXPafGO46p83XRS9Oh9\nhV6QXqoCnfmyJjP4BhqXHSDCMdqoo8VhFm9Ua8gCDieAoR8uMBB3mH0oX7nG\ne9nTJSw+qf1VucTki6O/p4CuKnRzT2LefIartm1HmZkWmqnr3qN7QTcxWrac\nLRkx3u5SNT13wIKymY89bA/jt0iM2DB/RvkVoKetvGDHuvTwcAJJ0Q/7MT4w\nyq/pTW4xBW16NjpimQRo/ONyb49CFPVjtfzluWSxafflOCqKQvl3O15LGR3q\nnHAXIddP9GjR493LlS533pNM75hMCtG/7V/1hDo2WtIs/VYJucG+jJSmCDFn\nzM7GzVM+KI5QecYWaqbFljfzeVmJIad8EWLv4A5cWgzkIi3y/Iy9bST5ihGs\n3REeXy1fHdZKk+wZALZbqhYV6ay4Wre9/vG064QG5qnuzaww32cblVC/0Hyp\noRntcsrDj86ZPPOvwCTIDRTjrdcDANSiGLizgVaeCHjqrwqnvXzf7X2axY28\n7/Xfh+BD5TuUQM6AWGTja3aommmxtD6c5OzyAzCCv7l3Ds4K416SiVf0ZXu6\nINfZ\r\n=ts90\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGB85gnIqb/WcTEY/w3a5mcG9fhC5LlTLj2CsoWbbKvTAiEA0KeEXQMEb/QQk/qh1X/fvVPIor7CZxryhv5KAgM3O7w="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1-709831f6.0_1644163426351_0.7782303255627914"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.1":{"name":"ipfs","version":"0.62.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.1","ipfs-core":"^0.14.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.1","ipfs-client":"^0.7.7","ipfs-core-types":"^0.10.1","ipfs-http-client":"^56.0.1","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"_id":"ipfs@0.62.1","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","dist":{"integrity":"sha512-qH2L10o2/eVoarD5TnqQPGfM+lvzSzkpojnOPN3VoacYwiChcoWaVrR1BLTZkzWszZAB+gNJabi9z5djIEGWGQ==","shasum":"f420e3fd2a8172ad30564fcb8f7b0d2ad3a872d8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.1.tgz","fileCount":28,"unpackedSize":1750075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAU4rCRA9TVsSAnZWagAAK08QAKEAVd+/Pq9MeNV9h90P\n/7eZ6h7/OqVJlgKM137PVoqK1fMqfsUy8YZMtxQdSft//0Jgs0jaXsmhESPJ\n4tQZf743FYjE8HwWl/pePvqdmAxw6uNF+WOWcEKr73FWaKGw69DY5FM1S5jQ\nFwPA68ziocaLnk3a78Rme1SttmfyrmswaRrFqIGmouNVV+kHjBfTBVH5uEMp\nxbRFKMz/1EMCD79JiRrTZqpqBBXTGjZ9q1nDNsR0NgIHwe4zU6eXgfQjTV4s\njwVb3ZtFtZLm4KDBccjPbJl6C0U65ukcuTQ1l2OB7W/EwhZvW3uvyxOUqSlb\nqgJ8COXc+RWVuORfi3Gn7ddi++bBwRi9SyMYBLTohUSityL+hNOIuoMZjyXV\ng5qFkCOmwIgcdbNEOtDAaZUpZ/EZhnWri6X9mamXzKgeJoOesCe69O26KSEK\nxTHiwEVC7908jC2T4jHznR9yO7PTIKzAnmDcoexJ47z3qqkzQ8DxWe+sfNwE\nyrGZB29hdPUjaiIjCyRlGzIdjbWH3h1C7c8idW667aI7PB8mCLyTN0cLwFvT\njNRmU01Hoy4JjIU/RZ128VwzIT2g40IjDUla38omUTPDPNnwphFwoMnSdrwC\ncPDMBxS4tf2+rRBExeevNHLHy2drRdwHfnKkLaz1+j3vJSjMaFML51W7Wwc2\nFiDs\r\n=yO1A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJBSePagplwxxXVNvpdBqDbf/5Jsng01F2iNeIC0hHOAIgZwqh/Ai+mJJjutveDzheSrvvain37QkLBPLfYjuGSwo="}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.1_1644252715714_0.653473119678518"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.2-1082fce9.0":{"name":"ipfs","version":"0.62.2-1082fce9.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.2-1082fce9.0","ipfs-core":"^0.14.2-1082fce9.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.2-1082fce9.0","ipfs-client":"^0.7.8-1082fce9.0","ipfs-core-types":"^0.10.2-1082fce9.0","ipfs-http-client":"^56.0.2-1082fce9.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.2-1082fce9.0","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","dist":{"integrity":"sha512-lodQpmRHf5Wr/BuUnRZvVideFde3V3DmPu4xZiGq0rhad/d9d3OMKEoAxqUIIwIe8W2FYlcLz/wBa4xWtnDGsA==","shasum":"df7b13a1ba7b2f5f3aa9409aa6645a54fbb606bc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.2-1082fce9.0.tgz","fileCount":27,"unpackedSize":1751153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiD8YUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+pQ/7BTRapxSDMFeVDHdshSbqPT9t+OGQoXnW0jApH+vLzvYWlNQO\r\nbz1L7Eloctfl9R0UXW5nblfBgk8t58gDWvnL5ZAKeJKTnsazwn9OF96Tua8u\r\nfsXEbBH5BfSat1yO9p3yk7kD4Scqn9EHaobLBihT24pIEtZO+XcEHBYNGu//\r\nM3kg9afYcWZyE6Hz5L88Xld2ppTl4q5AOU56Cxpf5RJvUNmuOcsfjyvljASX\r\nJXV828j7kKc8rVDBjtK43LvTimRO+2qBguVefPmHcWxwmhbeQRrASM7FOSOy\r\nGdv/4iiBZYfdUr9XhTkwcNiWB0MUw3S3b8hyjnRUqbQJlTPy7xwScD9nPcyC\r\nTL5VKPNPPcWry05/uLY5gnj6CFgSklaABoRvvph/q5fLykXfCjSqb1wpwmrP\r\n2naSjbwkHc7L0Am89Hw0Vsq/PfprccsSMy4OKrGJ15POnhMTrQjCCQ1UWydw\r\nXKVapAgfmTYuJlCdIiCXU1CLdTumdbqh08qCh4MDkkdvGDv2AqmnrjQm4s1E\r\n/IxWTBgq0oTSNDmEemI7mwF+1+MhaJ7TOAwYjHVu5osh98AYc/0l0gIs1vq9\r\nkQ9J9S8Z3InKnwhOuwiyVADBulqDwOZz5dSjpzhVSPc+SWvwunLO+X4klgC1\r\n+oo/l732/MBPvKECS/3g1iZuJ29p0Hw/+ew=\r\n=y1iY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5BnzxK/FtqK4lrQLd3JbxjzNDSM5DCkWqlZTcyeattgIhANZV8EXPpW/ijfAdEqs7b4CjzL48TAIEn95b66KK99eM"}]},"_npmUser":{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.2-1082fce9.0_1645200915922_0.938697392408862"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.2-125d42ba.0":{"name":"ipfs","version":"0.62.2-125d42ba.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.2-125d42ba.0","ipfs-core":"^0.14.2-125d42ba.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.2-125d42ba.0","ipfs-client":"^0.7.8-125d42ba.0","ipfs-core-types":"^0.10.2-125d42ba.0","ipfs-http-client":"^56.0.2-125d42ba.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.2-125d42ba.0","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","dist":{"integrity":"sha512-LmKdNjMJc1BkCYNPBFHZ7CktByBakVeZ0XLXo/UWzhd2TnwdWxkzTpIx4vKuZr/DCRQ5XIELkO1Vkr+8IicWBQ==","shasum":"5abc4316d9a101679644be4f1b37070643c206f0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.2-125d42ba.0.tgz","fileCount":27,"unpackedSize":1751736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiHeueACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrSzhAAmT42163l+yXgcPXwOXk4IQndXc1Z06Ak9n5Gx4havwC20eqZ\r\nV3bUWJH37pSPp09WKS2sh9XHgIYqQoqSFKZXhXQuIvmBHfBrIxlML/lpHbFJ\r\nDrsWTmCOTRpCrtwuP0xs+6zI7sDp911XCPp+cwqMfZVYSa4j9mkD4Is2Pv9W\r\nAxnwUBxyEueGuoHcd+bphPKl/f99HII1sCTa4+kemIYWs2C8PSFfIZWr9/0F\r\n383XrSMn3KDmLu6ExKg5TPkZvnoqTvEpDCqpfI1BdLAa8u7SCO3fQWpQigVH\r\n35MsLoAxINTRRClSQHTDULeO/9LlqESSqax8jnux2VlfSXA7CZjAJsnFMGqy\r\nm6OxNa+qLLQbXnSxhfQTTK9uTYlXtz3J0U2q57KG4g3BRMiOH/2Z3ug8o2/b\r\ncXpqnyxu3OCdVjN5xOMpZue1cus5rFMa/8Q1eKLH3kpBAricCiEnm8SCEcJW\r\nJBKFwb/wdg4v/DZaZhgYzYOidOKcSWQCUL/5UNWsXXmRjB8GHWtTrOyJ5vDl\r\nV+5rCr95hJBFf9to9OCvjJ4ojimDi2Xn28cN7uDeQjdLnBMrHFHE/mtbYDWd\r\n4dWR0815UNjjaPCR4NJIHhh2RHEKOQY1uWqEmPZMYm+AGedPVvrTRfOiJ+ce\r\nIfuvZEWzzs1mufjlLzY5dod1zc6tCBx6+Bc=\r\n=RDdF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBrbJj0XDYgJzrsYrIfrsa2talX1h5sQJaPP6m5LKx6wAiEAkDfeR0l9nRb1oS2vFBzFDPwJNAVgPvUlooKR3dRVHGo="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.2-125d42ba.0_1646128029979_0.33407697491430577"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.2-df1bd1bb.0":{"name":"ipfs","version":"0.62.2-df1bd1bb.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.2-df1bd1bb.0","ipfs-core":"^0.14.2-df1bd1bb.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.11.0","interface-ipfs-core":"^0.154.2-df1bd1bb.0","ipfs-client":"^0.7.8-df1bd1bb.0","ipfs-core-types":"^0.10.2-df1bd1bb.0","ipfs-http-client":"^56.0.2-df1bd1bb.0","ipfs-interop":"^8.0.8","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.1.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.2-df1bd1bb.0","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","dist":{"integrity":"sha512-JoM2B01kJS6u2Ywvuo0Mffw2hvUSGTIZDrtwSsw3/ZqXnaAnEWSn7XURH2GKVuMsetorBYoNP2UsZtdX8Z5Maw==","shasum":"6ab4ca6d18103b4b0a9d74b45b7d75018ffea082","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.2-df1bd1bb.0.tgz","fileCount":27,"unpackedSize":1751736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiHf9cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpv8Q//Qsv72RO8v6kyev93Xj7tcMogjpaKp8YO4F7le3rc0YHCBHej\r\n6/FfMa+FtmdejjV1euWV9DZfPDJlhy/BkEZNuMoPh8v1tpGg8lsXOvNlFJMq\r\nlY4KqDF5YKCvHxlly1s4UCk/puqDXo/W3NZ3PrKIj0vbFLDyS88eZ7phYLPn\r\nPnI4Ki8j5MQvHuI9doJZ4oIsVacSjDZHTlafPMb8uxwFvLBT9a/3GK65qxBN\r\nNVGeFXXjdGgAC6O3hOt3Fo3fYeCc8nSBVwvYTlWZV2kKCEnmZlypDMLEvj1d\r\n4+4lUBP1s/T3w/cI0agqWulxaFAEKve2pBwUn/ayZdbpBKiggUvU8yeAI8FN\r\nTtijdaBmR60lzK2KuwGq4Fjf5eHcD9yDjDOtq3k3BCf11zPSbMFe+XGxoFr0\r\n+X3Pt59aVDRSp2wl7eTkd5sbCHjC0oOgozlBBCWn2EluP4ZVpcInpJsATDQX\r\nqEZeAEDHEDJ+AAvyNCli0iHcObXdFRxnSQY/Bse0pJ1T/ciWOoCKP/iuHvPH\r\n1VlzUH5Q5Kut3m+0ONcQxiI6sXcbCgzSBOj9FF3f5HKas5K56Rv5/nFM0m9N\r\nU+BhFWgvKKrO8SPdBWsOIAmkKrc8/ugFTDZnNXJ6YHRmUpH6g7l95SBCrTp+\r\n967JK/Xbk/9L51OOcdpoaSQg5rvxW/ogtCU=\r\n=A8o8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBVAb/Ys3mC4JNkqR85REncy+jPCcGs23YJ2Ub/Kl5N4AiEAlO9WYGlEeKzjb21TjmV895/igtywV3f8OirlVfG1Aak="}]},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.2-df1bd1bb.0_1646133083866_0.704014185782935"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.2":{"name":"ipfs","version":"0.62.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.2","ipfs-core":"^0.14.2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.12.1","interface-ipfs-core":"^0.154.2","ipfs-client":"^0.7.8","ipfs-core-types":"^0.10.2","ipfs-http-client":"^56.0.2","ipfs-interop":"^8.0.9","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"_id":"ipfs@0.62.2","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (linux)","dist":{"integrity":"sha512-nzHIw2T2iHYOvxE6XpvFsIx8M+7IlbCmEPRTgaxdZykUVh6j50GdX+/wYeusciyav1kY9hquID0AEDoI4HkKJQ==","shasum":"90f75e5d35dddf86de1dba45e5ca88eb675e5e3d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.2.tgz","fileCount":27,"unpackedSize":1733870,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDUd9kIoHQnaljx++AhzlEDSS22VWkbLC1SdCoZ7XKZ4AiEAna8d2V9bwpC8BNFObFfDL+LOncP+7CqJAwvv8z0cVn0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTFvmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBDQ//SyNTrOdMBCxbb7HHVdccZF5r7FYMFNYTMc7DmOY2SV1KF9u6\r\ne/o0DlW0zcymhJzUuAL5vOVuS/8GOODClXovmHIm4epzuvknzQzmRauBI45W\r\nMaz+Jm61rVfcgbs1qQc+BNuF+oyHcwU6AneWsXij9UoM5wM+cIL+BWE8Ksif\r\ny5jh/fVK6B3foMozHmNtrQ2lFzof3vuOLqXtvAmKq/amjPC0tTzCn53QbvRj\r\notbyVDBkYwLmveER6GdAKn5TbSp2pe8JO5jvttgDZnCywhDdK2vbTcLdO/Jf\r\n3ftjRqqW1II6LIBipjGctXhBtdNxO8B/f0XP4K6+u0YBsqOMdYyf8jYcFbIh\r\nSaG7uh/7VdslMwKTfSYLhhhZDP0vDiPNVE7oe0iB8n9ecbDHG+ANeNI2TLhd\r\nKsA0NNkgLYkI6cj7WY+BchFxVHLH57i9UyKnyqGK3yQrJ916lpvob+OXi0AC\r\nBvBhvgs17aQNTRwqYrJkiwDuJ8cGVv+lAbloE27KhJb+Oyod7nYxEOEptuQM\r\nBt7RVNY3y8TUHxCF2+STvFqpMkosoutvqqr+3AniQvDdsE41wrltSJubtkPS\r\nuOz6xXLqyfXPBFW5lzJQsRytePWnrDYvrOG6otmD4P1o0RWZLLXmJzzccQYM\r\nmh7JEzR/FHv2EZk67olc15S6mAjB/mt9uwU=\r\n=YYoY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.2_1649171430033_0.6375396009556127"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.3-e90b8f13.0":{"name":"ipfs","version":"0.62.3-e90b8f13.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.3-e90b8f13.0","ipfs-core":"^0.14.3-e90b8f13.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.12.1","interface-ipfs-core":"^0.154.3-e90b8f13.0","ipfs-client":"^0.7.9-e90b8f13.0","ipfs-core-types":"^0.10.3-e90b8f13.0","ipfs-http-client":"^56.0.3-e90b8f13.0","ipfs-interop":"^8.0.9","ipfs-utils":"^9.0.2","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.3-e90b8f13.0","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (linux)","dist":{"integrity":"sha512-JUZzzC9VrpN8XjVwWDtbZOoMpV/0OX7icsIlPrsXufvso76tUJ+dcK9gW6/lfDelU+yPVp/I0iFd7ki6q5akqw==","shasum":"160d5e152804a76314f02512ece8ac97830ad0d4","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.3-e90b8f13.0.tgz","fileCount":27,"unpackedSize":1733991,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZG24Hk1RIqm46lJhk5DKg3Suidzp75Lq+vhwhCYb04AIgBRS47skA2ayiRWxeUCA14X434vGOr1LzIkKJfKIAOH8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTGnwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmphvw/+JPkIXYCXb4ZmsJMzQcDTnIf2jSwyp3mYbQvFslhIlsbU7eHF\r\n3JI/7an9SU3GbOJ8BQmARUAKVQ4OvfIosVqD7SggFFI7atrClFAgX6dOF6HQ\r\noWsaDX75+m/mJgB+d5efIfmLd8wQdOb/jbgjVxGosTsFgzMl2tN/4v+/xuDq\r\nRa3fv8rFG6Sr+uaGo2x9zf6Iez8cGzBQbq81NFz+CnDYeEuOR8q5Co3A3zFd\r\nVrRO2SYbQ5MbSIcYBVHVyDs+gVW31L0VJr4IOB6tCzagIhAGlKrQOxwv8tgA\r\njOcASHDax/I1id71pP9LE0Alp1ckF1m15bSEM7iv8RXvD2xUyGHHMIZGupM8\r\nmf4aRKrL8PE+1mRdhJjE69XV//OGpnQHWQE2ryv6M5e1xIQFn/2ljh4UFH4u\r\nTc4IyAe8V1wj6h6G+rwY8ln8J3Z9QGaK3oVi1NiceEJu5xv5sKWG5GN+u6GR\r\np5yP80jyp7fXfW/7jx6+kRH0axSNZxGDNC/kZn2JiTKy8xEOH7Yz91iX4BkI\r\nD+C5Y7zBG/w4VEa6sMmFG9IdwqQac6efpw4RJCT6jGV0lfjYMYF8ahLjkP29\r\nfa6/Po6EZAss4j7ok109BDw+E/dKIQkLCLDnnc67mYrWmxNJE+WQculEjBt4\r\nm5zSkqPEJe0+22bLj4Rs1aIDRy5ZLaUu5bM=\r\n=soI+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.3-e90b8f13.0_1649175023748_0.9074388391930452"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.3-8f7ce23c.0":{"name":"ipfs","version":"0.62.3-8f7ce23c.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.3-8f7ce23c.0","ipfs-core":"^0.14.3-8f7ce23c.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.12.1","interface-ipfs-core":"^0.154.3-8f7ce23c.0","ipfs-client":"^0.7.9-8f7ce23c.0","ipfs-core-types":"^0.10.3-8f7ce23c.0","ipfs-http-client":"^56.0.3-8f7ce23c.0","ipfs-interop":"^8.0.9","ipfs-utils":"^9.0.6","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.3-8f7ce23c.0","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (linux)","dist":{"integrity":"sha512-Mj2ELrLwaCiEX6Q680Skglo58I6AOnuXJTlmTYW7InUKd+KxXkD88N+2/mix+kGBqXOurRz45D0NX2w+qB4DVQ==","shasum":"a36c64c088156b3dd43a233cac0c4025dff20ae8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.3-8f7ce23c.0.tgz","fileCount":27,"unpackedSize":1735601,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFRSS5UGpDDbUOTO5VJ+UQ7vaCvoO7m/ukMr2sOaQDVAiEA62weZwpAtjUCv1XZXWZzxnh6OfK1T8zOUL2cj/v43Nw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiX/86ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqXBw/9FkG2cmHF+NCJTihsvK6uQFYgjx5ZA6fmOJACy/LX1KN5V2c2\r\ncszVG6fTKSPUeqAGC7NKhdSkEuqCaA4f4s2Ajkn653KTuMjCv/Kxqt9V6Thi\r\nAfPsP2wi8CjRkSsQFW2H51oKcDPlvH2Ica/y34UqVk75sl0V6LxXk7Nxrh5z\r\ndEqKWMPQ/2ISKvf9RvLQJd5DxpsKF6c1lHO3kDXIO62q29RKCZoP5lCuaMY8\r\nTlk5WMFhKJtI7NwYGjdzJ7tcmN/OMkYwZO7orMn2OxgRCYfxxsY/37l0MqZJ\r\nYfJZGVcfRvXpHoAgp26a7r20Q4pZTntQqvoEHDY0Ig2zviQMuVxgP+M8L80G\r\npUCpEAO2Cn3Oh3d+Fmjew3kx8LPov92bRBSxwEV8kcWMsV2ngZx8CVmbV3Sm\r\nH3ctzbn2Ok1j0MHpXHuVkxmLWd67LdGYaPgTV2fSf8G0Q8U06Q1TDIAoor7Y\r\nWDxUuvzcdIgngPreYZURIkfkRd8zzCyww5+HfRxm5Ynha+kTxy5okpBV5A8f\r\nCxsG2Q6j0udbU6db+4F+aHh3o1RxtWnqe9TF0oPm5hPSKGZtRpcek1JIu+Ka\r\nnfu/1Povs3gUy3qgAV4Eez2+gm5D+PURRm9f64Qx5/qKxRtpDsdmvk2oQxWN\r\nX60wjzqmI/FT2z1Av0PPs7o/PUPg+zimo3Q=\r\n=WcT0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.3-8f7ce23c.0_1650458425558_0.7391682393771413"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.3":{"name":"ipfs","version":"0.62.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","main":"./cjs/src/index.js","types":"types/src/index.d.ts","typesVersions":{"*":{"*":["types/*","types/src/*"],"types/*":["types/*","types/src/*"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"publishConfig":{"directory":"dist"},"exports":{".":{"browser":"./esm/src/index.js","require":"./cjs/src/index.js","import":"./esm/src/index.js"},"./path":{"browser":"./esm/src/path.browser.js","require":"./cjs/src/path.js","import":"./esm/src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"run-s build:*","build:update-version":"node scripts/update-version.js","build:aegir":"aegir build","build:copy-cli":"copyfiles ./src/cli.js ./src/package.js ./dist","build:copy-package":"copyfiles ./dist/esm/package.json ./dist/src -u 2","lint":"aegir ts -p check && aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js IPFS_JS_MODULE=$PWD/dist IPFS_JS_HTTP_MODULE=$PWD/node_modules/ipfs-http-client LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"rimraf ./dist","dep-check":"aegir dep-check -i ipfs-core-types -i @types/* -i npm-run-all -i copyfiles"},"dependencies":{"debug":"^4.1.1","ipfs-cli":"^0.12.3","ipfs-core":"^0.14.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^36.0.1","assert":"^2.0.0","copyfiles":"^2.4.1","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"0.12.1","interface-ipfs-core":"^0.154.3","ipfs-client":"^0.7.9","ipfs-core-types":"^0.10.3","ipfs-http-client":"^56.0.3","ipfs-interop":"^8.0.9","ipfs-utils":"^9.0.6","ipfsd-ctl":"^10.0.4","iso-url":"^1.0.0","libp2p-webrtc-star-signalling-server":"^0.1.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","npm-run-all":"^4.1.5","rimraf":"^3.0.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{".":"./cjs/src/index.js","./path":"./cjs/src/path.browser.js","./esm/src/path.js":"./esm/src/path.browser.js","./cjs/src/path.js":"./cjs/src/path.browser.js"},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"_id":"ipfs@0.62.3","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (linux)","dist":{"integrity":"sha512-TsnjQRzV4GWi7oNlnbHLq2tdEw+0m5sZsIcLr8nGiNj3lzJr2QltNN4p0V0ssYJ7HTaSeOMrJZEgZ7OzOkPuQw==","shasum":"4045913e7487d74372552dcf1f184e0da991e719","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.3.tgz","fileCount":27,"unpackedSize":1737333,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFjuVNvyEFu8GjlKXkYh9R9uWyl9HBFTiSUnmI8jDxLtAiAi12MA4i/Ov1y38HAcMDg3aF17UVHnD2u99G+TRhJdNw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiZ5j7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4BQ/9FcCITcG1g4WAEJKtGBGM6BlEE6/Sf0q3152+ge5KFGa+RbdW\r\nuuQuk1FJ5Cs3n4JVPsmaUPtij37D5fGNzrE5ku+fYYgIONcP57cBeS0XqHfi\r\nwGmfQeuiXEUNoecP1oXuclmBRnFvdLZ8/3dm/iuirC/UrEaE2QiwRM24pC4z\r\ny9OSaOWKT3noxAryPdNX6lyX9ZMVn0mjZOMe6gmvBMMx4XPdXbGefw6eOo79\r\n6bHZ+K5ruemR/EJzbaURRyaZlaQT3zCVlQRuT4v9BJGUkpd5kDg41WqwP33o\r\ndawoF3dF5teTSFV/5uwV/l9a83opb29O31cFOois186UrqEXF7w10Pc/aKrn\r\n6EMhDNtHNdzX2arvCkjhm1DYWLIDd8zwiOUBAUaIk3LOicKYYmiW7QgmjkMU\r\nt6zy72gKR2iOymmx1hP2C6TLXe9rQ61zjrfzTXBTkavGPgQvT6gcNuXIeBgs\r\njSKvlh3WSG1py5Yoy7dE6U2DgU2qZG4e+gcjfaFAhYqWmIO9YEtiw3hMgv/l\r\n6SqcA1wj++28DK9lCLsLFDrOhC/fiSDajOSxZBGgpjOSqcSQkJyQ7Sw1HqsE\r\nUziLzATYuMfRDhnYUUx59TC0PRru5p8RrGbD+3GahLAKFTJRP+Yng2r4c4Ob\r\nRcWEcGtF1cqD9r5I2s0scsA9rLCJn3xxxJ8=\r\n=oJvx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.3_1650956538908_0.9847711391487726"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.4-7165bf71.0":{"name":"ipfs","version":"0.62.4-7165bf71.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.12.4-7165bf71.0","ipfs-core":"^0.14.4-7165bf71.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.154.4-7165bf71.0","ipfs-client":"^0.7.10-7165bf71.0","ipfs-core-types":"^0.10.4-7165bf71.0","ipfs-http-client":"^56.0.4-7165bf71.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"0ef2fedb9b9cbed1b4855c48b5f03d343ceb573b","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.4-7165bf71.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-S6Y/CpHiJh6gpo/es5GBPSuoeRL2VYtKwjyzppBVDVeE5La5WXT59Yz251YiQriHcOSdHoroF7pKbu6WKJ5e3A==","shasum":"245f75762128f3e6ae8e67a8092d84eac53d30ab","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.4-7165bf71.0.tgz","fileCount":32,"unpackedSize":1609605,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBjxwSQLQd1VzkHtpNIeOP2f8IcAUDyiXOgw3VqMBwbbAiA3Kupra4QTjIzWmL/wxdn0WdMuY+lPfWit//5voO8HGQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJigq8nACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo/Xg//VihH6b1YYL/EKFiYGWyKFC0UL50KB8eauhH7q4y3VJIGxub1\r\nM7IwklLtrVdnpEhd4FoJqblj9Bn0/+JdyAdUKlLvi3z2HV130VO8QN91x4jZ\r\nUbDOGLBbaPXkt5PLvSqRJLBaeXCelOG2iMH7g8VRT67+NEe39w7N1vIQCdBP\r\nMAa+mftsavxBUKQIynpSn/g0w/HXrL+CMq/GKso0v+8SgYar22fFnuPgWZgr\r\nNX8bN1ljh2mnJAsUHEyF9IKWgvmz+9KeK8Y7BMNwR94ub1m7IXaxZoEa+ae6\r\nlxv+7/9IbTit//MvNqTuiL/lFdLJWVd/ZKSj56T5PLZypyusOqfNc2Z9vkG9\r\nqJtEyJVKKwiDEovdLho6JusqpKe90NJ1PJzGztZh9F0aHuAQsOeveZOj3IuX\r\neMELYQAMwinrKG5rQWfc604y62lOjfbFswHiRNRKvOXR/FmL7LvutMWEcreC\r\nMSAVhy20811VLJe66aOcUBSGratWkcmGC8Y6PkRLBx7vH75mUADlq52HfvES\r\n5Yh5OsS9Y1eVzON9bFF0BrfwCij7LT0PgMNdcYRlWDY6AsMeHUeABD8b3vUo\r\noMxC6ur0Zx831j7ae4x/kUAze3/MA2SjoDef2J9pukyjeFTbM1CLIK8+HpeS\r\n1BGwqoJiEJ2VF7eC7IlcmDNav/8VoCW5esM=\r\n=vTi2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.4-7165bf71.0_1652731686973_0.20150912877482674"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.4-4e93dd5d.0":{"name":"ipfs","version":"0.62.4-4e93dd5d.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.12.4-4e93dd5d.0","ipfs-core":"^0.14.4-4e93dd5d.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.154.4-4e93dd5d.0","ipfs-client":"^0.7.10-4e93dd5d.0","ipfs-core-types":"^0.10.4-4e93dd5d.0","ipfs-http-client":"^56.0.4-4e93dd5d.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"102f592858ec8237081913452cf185a3e44d2596","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.4-4e93dd5d.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-R9jU1gtjKtlkJa+bvnLgLciW4xOemv+S2hyIrpMk7A8P8Hmj2n2KqNKe1s5BTELOmghg+W7Q0JwkxF8oVBRXaw==","shasum":"b0f2c7f6dbebe20d8f68c63784bffc29dec917f6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.4-4e93dd5d.0.tgz","fileCount":32,"unpackedSize":1612726,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtnfcW/1OINiEE1A0hpfj17CS188G2jhFkTE4fNfEicQIhAObY0GNGmxflaUvCpFBJXpqhXrM7e4QobKUlHUWJZDBI"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJikNV6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrcZQ/+PouvltclEz3ZhsANVmdKEsd755hxX7kHxLiNfo0p8dKhAKZ/\r\nwo5U2bjMIT08cUR9upC9QnodwCZdg+mbGq1r0AsyGEgMlCvfKNiMP6F1nDtU\r\ny0x7GK2E7T9sKEZ0oEcw6/h8ZKYE4fTSN44bdWlXdDaC0W51U4yZUoErstXw\r\nvXgY/F3Q9vHfkjA0pbUFeYWEASnbPR4U6mVWA5qPinjytoxqmJjRLJLpvNvo\r\nO8a6dt2hNHW+StcYGdInEgZgAYVlgvA7VLC0DCosvTbWxCY+I7RSuzAKgBNH\r\n6SmqbAZfZZswZUY0xYApCYnwSlEz9yPuza+XFcv1vdj404NHadVA3r9jRsH2\r\nQAgnrzHX+52nwNJKcvVv0oVUryUS9RmdWLzuc+P5ZuhTnG87aUCInqJlDGDx\r\n+eJMdEHwHDXXBAnlIhQCBVkhxGolb1MOX1YtDm6wb56NXg7PZH/3+9Oi1UYB\r\nwlj0YdQVTCMiy9C7iReX9s/3aZ9lGbHEX1n57Uey//YLT7aF79wXSYDjar0Q\r\nkkYh+CCDBsFZYmuAGhLTT7rxHXMDj8UpzzepQi0CqS1neWvyoSHa4P7sH/iF\r\nKIxOyETSXuexSnIU8d4J/7HMAbR05cfElkiYtnT1xvbJ6p5EPMhT/w/F9Tlz\r\nFzLcbu+wxnNqncCnLFWCEf5cwEAc4l2fMxI=\r\n=cYd/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.4-4e93dd5d.0_1653659002476_0.018203207861455573"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.62.4-919b27a8.0":{"name":"ipfs","version":"0.62.4-919b27a8.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.12.4-919b27a8.0","ipfs-core":"^0.14.4-919b27a8.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.154.4-919b27a8.0","ipfs-client":"^0.7.10-919b27a8.0","ipfs-core-types":"^0.10.4-919b27a8.0","ipfs-http-client":"^56.0.4-919b27a8.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"b3b172fe34f542a72746b3af9351bcaf25bedda7","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.62.4-919b27a8.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-OEVFn/buS2sUDLsOxFB59N1gr+9z1nstmHSJ8pYZSMNb4LTT2nA0LDL//h+IzVjfzCoriVJVOPTJ8rzPJy6imw==","shasum":"ce8a266d46fb2137ce0247cd585ac5835a8141a0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.62.4-919b27a8.0.tgz","fileCount":32,"unpackedSize":1612397,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIByH3QZX8xTroMYLSqshnsEjMGfOAXjc9/JgpRRCczLMAiEA88EbsKgGEEb3CEm8pcOaYaGBzmjPHdJ0Ef529TDOy3c="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJikPnnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpukg/9FRsgsoLPMUEfDHRY8c2b83GQVrHhKLJOVyT4lZ/1RpFDUCvi\r\n3NmiUbexuwPQy5gBVIqOeUY281jaEj6Ziotg0F8jmrEfCz/RvhEKCJtgnzdZ\r\n2Y8EYz8VRdb9Iv61VXdP6vlB/K7/cjtP2VYSKQyzceA6FFampHWazdw8trKn\r\n2uAaZVSdupzsMbvXpIa5Rg35q3S35voAQJol3beq76gm44hU5ACohnWN9V3F\r\nlIlPlErIhUyW53Nhnhk17NQg0oFqn5+KrCpXalutZ8jXRQxT5wB71LocUECh\r\nHjxyLxOwOvPhRyCIesML6cBVqYdzdGgRtRV19U/A1fIE8Jwn3UDtM4RzkI4U\r\nsByovdOA5y9m8iGGmU7euNQLI/nGvSnenVElZTaMW3figwmf1s31C130e7Zh\r\njziMeE3Zkiw9nVbGj121CzcmeXbDD88kV3OFENr20tPbfaHT6ojFrzzx6g1V\r\n+2SQGvBpgBj0b168lgI7xKOMp7Jnkd0vE888Io44KR7DJt/q72Un0g5ypjae\r\nCJgx8z00yIQHTe4gReTJvVxFRirieoa7zKcgHdT0KeSqh83bmRKuZ8gtK1ta\r\nm41VkNDJR38wQZbHqc05JEn599ytLp6DCqWPySgyLLtWPffAA8HsPcCEE6JA\r\n7MNrXeiTpkl0tiUN5Gh9pjblX/v+ek6URpA=\r\n=Hc6n\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.62.4-919b27a8.0_1653668326830_0.18889098030583673"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.0":{"name":"ipfs","version":"0.63.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.0","ipfs-core":"^0.15.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.0","ipfs-client":"^0.8.0","ipfs-core-types":"^0.11.0","ipfs-http-client":"^57.0.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"38e78cc875309ba6316706b63865e399dbcd18c0","_id":"ipfs@0.63.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-cE35Of16MLIpfho5j+yA99jOq1n6cAJKXPPGrZxopx4/ePCxSKDQMt1lX8cJ/gQ+WjOM8GAijUa4pirS1xe/qA==","shasum":"0b2e9cab988552390539e48116392977549a9cb2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.0.tgz","fileCount":32,"unpackedSize":1612320,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeK+4/K9PodpMlK1DWhmScbkxyXcWG6g688YJG2zgWVQIhAMTS2S3kdbm7mOR1Igu6D4fSosMM2rFAbcn4D4NL+14e"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilRhMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrY0A/+LZZwBpoyeBfvoUAP5oxLrLD9MpZn86Yx2XPfNOknTdDRf/P2\r\n5EFHOaYVBgTJbPicHB+Kj5bkAmG2EWABdLXBnxRbx+3Z6rLqgKseeu3fKW0y\r\n6fBdKNQrrayi+B0WHcdfHveRVfBKJoNoUrdLwUGRU8Kvy888Ag2kft0ygO/B\r\n7+JchJ0TLTF8NX7bo5H4ttOe1ovxEILFL1XnSk2dvRujXSDKkcct9uSUzmM2\r\nB7VlXCBR95ce584ugyWuW4+ylFnTdM83RU6MR3YJZ/nuAVSOjdlHnLNZej5W\r\n8YHFLtVr6wUHXAPARr4pn24o4kMSFRXMITQ7s7p4X+PoLdwjnlbdNIi7VhY1\r\nk6qe6CUUNYK04NyV+2Nh2InJkFXyp5ST0DyGH794nFGMqpAAPxMBcEowxryX\r\ne/VC99lh/EwShRhqzHdnXes6JtT1aC7fo7IZtdQ+v5rxyPgjLMic/4BlU/z1\r\nja7x93rPWglKNpb1wdtnOlw+qFHjTTuAtcXIeCusmbxfg15f51pWgSy9jOPb\r\n1oZiakWkut2rSap59q7t9DsWBKBOa4fD5IQg8OGCSwjxH+YWU2u0nVuEqx1B\r\nXxl3EYIquIHPWLs0XMWXMJj5KlXY9xkkOloVKABn+0Y5pJjzyc/HDJZ8HOmS\r\nFekmCVgCehY1g3f8f8m6bkaqoYlyIsBY69I=\r\n=R/TG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.0_1653938252370_0.4644112102127058"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.1-ddfb899f.0":{"name":"ipfs","version":"0.63.1-ddfb899f.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.1-ddfb899f.0","ipfs-core":"^0.15.1-ddfb899f.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1-ddfb899f.0","ipfs-client":"^0.8.1-ddfb899f.0","ipfs-core-types":"^0.11.1-ddfb899f.0","ipfs-http-client":"^57.0.1-ddfb899f.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"87fbbf38470547cf82ced4c9fd2679df026170bd","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.1-ddfb899f.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-j2DUPJ44ibU3CfRWcxJTqz0dUnFeRM4i0bF650RliRlxgC7vpp4Tk7Xt5wvGdW3pFJhcMmhTBUyib8yTDRWJYQ==","shasum":"9d3cbf4b4ad0b94fa64fa8709360132cb312dc64","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.1-ddfb899f.0.tgz","fileCount":32,"unpackedSize":1612408,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAYad7uB8EoMQaoJo28tE5JqC1hQQHIDVkfXn/s5LPNwIgMYFLKQe1kpXJ24Ks1a3mO5B6VQb4S+8H4CXTIGUwljs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilSGXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKpA/+JEQKvA3M1LobWcL4Rbugr6pao9d+0cUmd0BfQzW7P3oqBbFI\r\nlpYX/Oy4Wwe7lOUza57072djI42NdJQC4Xr439HfaC6eWVdKVWComVQwPKIa\r\nKNGlGANNmuq/qhlcJmTKe/erR6r+JMs7nN7n9bwS0wIvIqp1ufCB/LbwMWz/\r\nLr7ymvx1QC1QO6ZL+F5Kg4ZTveKURgEvktaOfKGkpu3WSb558RG2Jmxv3xoU\r\nnc8AiKfhaaHwSnwHnBGzNBTRIUTYznhIWDsdaODVOJLv9ZekUAMuG5w5mjUY\r\nuLqH8A3/3uTPmLEgBb9CZTGREiM+9wdGd+V6/g4HUxfrUW/VSTfKMiySstdT\r\nVvOUed1fFrxYTrh/7Yo5c07dF8PF1YE92uJxsZLCTCSxU77x7Qf8lmX46fyG\r\nIxbGnt3/sq9T4PMw39Uom6L7eBIGx51kzSUocl7KBMdnEy6foMMz9y01R449\r\nTHm2KwJqX9IeZcmjmwVp492+ul+gN7Pmc9+GhuCFeC1SddiwPa3iz0+nKNPv\r\nZ8DnqCZgT2joth8AfgycTvC/icPszvUw84/2Eeh1NHr1HJ1LpooMPDITzSVk\r\nRkQWtWbNqp/HdFW5Y0Ciugka+3nzaKLxR9IlKD/e0K5XlYdE7+ZSppX8++/L\r\nMYmxkM1IiCpKOrYsu6YI3dODAo1luWJbNEg=\r\n=AEPi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.1-ddfb899f.0_1653940631036_0.4400771721048844"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.1":{"name":"ipfs","version":"0.63.1","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.1","ipfs-core":"^0.15.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.0","ipfs-client":"^0.8.0","ipfs-core-types":"^0.11.0","ipfs-http-client":"^57.0.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"a5856a6252c82cd4ef343a3999e893c2f6089706","_id":"ipfs@0.63.1","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-mKPGulQhMXFrWS4b5ZAR+Yuztidj1Kkx0MeRVLuFiLzTJ2g4b+t0mgHCvETqGK5rle29EabvDUQu7Q1Ut/Aiog==","shasum":"93a75e32d2413f57d00b3f230eac2fb284df4cb3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.1.tgz","fileCount":32,"unpackedSize":1612320,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGArFLkanSLqXVc/zBQCAKSP54IwbqVT0OE+r5mL9bHwIhAMVaxZeBkimCFjMl/Gi0Vi23DIy80Cq74oa1RD5fyuIl"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilS2TACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxyhAAohZcwbH63h+iecpIS1i6yF1uNyDgwP5CQdFMHfpUo6YHGxcV\r\n2FLM2MBj7Gu6ceT0qZ+vCg5flv3kuFDDursC2A+0ekY8jhfH+rrl+U11XcIz\r\n0q4NGGpEmNLeT4JQ87pZWBKNYJNa5AykPCH7/wtoHOUEpMFc09aIYM64cU+U\r\nVuiQF9C6jVCD5Y3cPSfJ/8XVTBGmNPy+ZZrQ82swCZ4QvSnVsLv2gHPvqtcL\r\nxbVa0QXBP9rVp5Gr3hJvlZO4rVE1epS+uPYz5nMEiMZChCql43SuMWLOXhKf\r\nN8fGXiIMl5K98NnX40MszSb5K+8rmLtrxY6cE3ymTscqTdXCjFk4Xj+LGoe7\r\ntwBzZYaN4l1adgeA964oEBsr8rM787zpylgfd30xWRv/D7uu064iszsORY4T\r\n0LWWiGmI1GOz05u35GiWXkqdoC8VHUPKC6QJHu0pNRDeB4pXWIadANvhuJnO\r\noCJjHsBNEa3928w/KLGnTwMXQwNdO+XnhbHzKmUYDUdwbqDaDQQ7ip6r1gmt\r\n7gpbm1Xitxegsv6IxeoRqwl6mtmH8hkkKPif3qEQgG9BqA4SSxTg8LzSVftO\r\ncBuPBdA/PYm36kUlcdVzgtSudyPc9d4X6WJyGX4hZHL33n15V+RJ1PT3T68N\r\n+pgND/SnwakSUTS9dePYV8wGqCbuU6nvYg0=\r\n=HPBu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.1_1653943699481_0.8247790074442107"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.2-764b4adc.0":{"name":"ipfs","version":"0.63.2-764b4adc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.2-764b4adc.0","ipfs-core":"^0.15.1-764b4adc.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1-764b4adc.0","ipfs-client":"^0.8.1-764b4adc.0","ipfs-core-types":"^0.11.1-764b4adc.0","ipfs-http-client":"^57.0.1-764b4adc.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"e174046b9ececfd2fb7fffcd8f6ad6211adc7499","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.2-764b4adc.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-0gRcI5TkL+FZ/biiGpIui/tz4gnyRzHmbXADpMcaohdX9uMkVWl/3MQFDgqKmkA4nGj9ahXe9of1jkwdeU1dDQ==","shasum":"8b9fcf2cef51510d23297f3d34f4f08c74a8cfc1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.2-764b4adc.0.tgz","fileCount":32,"unpackedSize":1612668,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHdr+/n3cu3qlbyA/F7ugjrfZCeeDFdQtHELGUU97noAiEAj0tA8Mrl1z2lj1DAE236ZpSeP2K3PSwos8NHC9nA/ME="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJil3ceACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpaEw//X3/nV9JxocxJdhNgyfHWx7o4f0JbZrHbpTvcQWavJxjcK0uc\r\niSiutdJt0HLSFVhI7Lfl0YOI1oYdGdc7JPQmSWCjnaJbuZS+ei+4u5DOinp3\r\n4iBHBT+xJCVm83eA2gVg5sXqNMX9jzKmoTCwWm8CvvK2H5m/O0VZoxwx2Z3H\r\nC1x+Co89Gfgv+kWFqaM3o7H1E1zrchA7Ndff71DmKQ35NM/Jiw+i1RUWQM0W\r\nfgNxkff6uT/mYKTrmG3CPu3ogk/HuEkdXm50V3NmeljCWpb+HNHLR9+KEdOk\r\nz0CcRbtUOYqemxBNmU2iNIOwmhEsNrX3dp8O73ohzB/ByNJuNUv1beoMxETn\r\naoyb9d3BP8lG7ufPBBRIxBbvFQhNCZRK17rKMz+DMOuUc3z7BT3AGHJPqgg0\r\n4wq7rdbcY/au6G3In2GS6d385tvwVwWqmMZa3TXkwHL+EfZdsZSIYkLnSrtl\r\nI1c4r/IqwPuayEEtzIp7+8NlaIqjVt/o+VU/mJeQECkck6NSjZV3MBeu5bE9\r\n+JzCqZL/nlT/Iv2QkF1OTE7SH5WFSP0EmNCajaceiQPGYZ1ub01etSGD8Gip\r\nynmKOOuzRAGtYLHBdJRhx8v6I8JUEssRlEgKSV95YVN/zk8W41PnJsReVntq\r\nWLENqQdmUs7NCtU7PgH0pp3x0mtDZWPn+us=\r\n=9jGV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.2-764b4adc.0_1654093598384_0.7095403244610001"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.2-be025c89.0":{"name":"ipfs","version":"0.63.2-be025c89.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.2-be025c89.0","ipfs-core":"^0.15.1-be025c89.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1-be025c89.0","ipfs-client":"^0.8.1-be025c89.0","ipfs-core-types":"^0.11.1-be025c89.0","ipfs-http-client":"^57.0.1-be025c89.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"624dbe983b6f235125107b73ccce5ca3e45cbe7d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.2-be025c89.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-9h54kHWPCip2SBU+XnzjqKiCAczc4pafyj1grbzVooiztZckz0Z7XKXBmiqiEpkrs+Z+voW1GpkJHtAbmVSa/w==","shasum":"2f20b2b796e28ee490319fbb14e1048ccac880bd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.2-be025c89.0.tgz","fileCount":32,"unpackedSize":1612668,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV840J5Jpsa34QsH2UaQScKzunhV6dcl89FbsWp2JP7wIhAJ9Tdhb/revd+ZIu3W1AbiVHc5z8IDPXeDpKpcFr/xC0"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJil3hiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo38hAAnxZ7p7Nw2k4x44CH6xitI1SIlgiIWYzNLcJfFS3icQnOuhPg\r\n4GuJoEjhMVUoY9HEJiBqmRVEcZPXQyqh3j7rcAHP5P3VlFlPA45z7O/xWIFr\r\nHhL1UkTVbrajD0c+eklMVW1ndkp2E5QarcafnQXcYJ0yqJxhzR+VkQy2JQB9\r\nAXTOdoqtl2PZp3CASHPA+hKAk3SyrLsL/g0en+LIOmQnxOLajzkpx0R8clx6\r\nidR34W80llaKKGDn+T76DhlnqnbkuAhA7ChDdYsfGiKSPqEAVUhEjVG3HTDF\r\nfdAfoLsHlRIVr4DoelkkzCrvC3I7LT6X2YMSKBh6Zwh3x9WGmE3rGGVjMbny\r\n4hVCmDv2pwzM3tTQnpxbUmxmwKgZ04ALl1sQQlkCC4jHh3NUgHBuCdX3ZpPA\r\ncqSuaAYhVW1Lqw9047fiTfj+p3fdgzg6TBU8EIy+SD4zLrHFbMPmNmHetZ5Y\r\nXeKwWT8cCGTrWF2SdxYRJNGGaD92qGTrZP2mPj2klZ+1R/ZcoQ9XpEWfhzfo\r\n0W0G6wMuIJb+77wlKxhSMQCgoV9PJCSxeAWHwM+glvnmDRMvk+HD7OR3Hyxq\r\nKKgAf9DFjuZlIKODL2SsTT/eGQekmlI7W9u1JZOWgMVpgSm0x6djySdm47Ec\r\nu+cgv2nZGxNfhYbECLxcXrMwCdLrG7SQNJA=\r\n=DdJC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.2-be025c89.0_1654093922349_0.8233999750163656"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.2-87e00a69.0":{"name":"ipfs","version":"0.63.2-87e00a69.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.2-87e00a69.0","ipfs-core":"^0.15.1-87e00a69.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1-87e00a69.0","ipfs-client":"^0.8.1-87e00a69.0","ipfs-core-types":"^0.11.1-87e00a69.0","ipfs-http-client":"^57.0.1-87e00a69.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"4aa63330e4f3184df8f4d39cd0880c0ac903e795","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.2-87e00a69.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-zqKkoQgY6AqkLksnRa+83cvLOYooy5PCIPU82xcBKh+clnDT80KYnbr9wIvHonEozESa2iDcWVr212xnL+eruQ==","shasum":"b587a8f594fffde4e217fda801451d7e4cc9a9b2","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.2-87e00a69.0.tgz","fileCount":32,"unpackedSize":1612668,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/lwaQoB+W4dDTaweWBcWyLcPhs/RF9IchYjkYk4dGTAIgb27y/U/bSR0cX4sShwS33dCAVyTrTSV+70JtmyLYK3A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJil3lqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmraKg//VxW9NJ35AJ/5OGxWTsAwmVYD0jnRuAJ0FqKw0um10JTU84bi\r\n2eohUjJgH1c7RF5gTGnPB4EwJgOGFIAA8JCmfwNHkXZGB6wbUrfABKPthZR8\r\ns3ZJ310kAg3K3Im/9CBnlqsHUTQK3tv0QqLMF0HxZmco8Ax5jtoo3iMM9p2N\r\nrYg5tPGUjD5F5bKum7upaYkakIFjq7+8MkIh8dsWkD6vvxYnpIfkKAqAe2Oj\r\nl3NiIziQdWuVe9DcQcaxjpuWGh3JhiuwdOkaaZ/Rbl2UbUIc2K76YDLrw/mD\r\nu1rRhXLHKuNhS9p8JFFqKV66v3Y9SCs7UnC9i1XLG8W3uzfhQR3BRZeskFgZ\r\nnPh//ktDmNEIfptt5dscG/ARa2UI4Sn7oiJ6l0R4vvIvoPlo0yfVqeapHaLd\r\nGiGDn7llZdSsY5Q820Jfr2CVapbeq5+gaXS9cFwLNuFPJExPks9Ou8M/PUhf\r\nJK9VCqh02Nj5Tn8aj1t1e76zFpWmYJmHjfJr91eWxE2UxJDbK2kyMyxptpqG\r\no0iYV91loPjy/yLCYRUVNkpsiFwG6C32vj0t9V1ewVRUk9gi8xbvZBsY6OR4\r\niih+QAJI8oT9DVQEbleyweuNTn2bOqLCnJs18gvWWIjoGNo3YErRlu05LTmo\r\nEr6E7Bybvj5Wn/RBO8+ZD3QVsoadVFzmI8E=\r\n=JF3g\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.2-87e00a69.0_1654094186412_0.5233199048704276"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.2":{"name":"ipfs","version":"0.63.2","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.2","ipfs-core":"^0.15.1","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.0","ipfs-client":"^0.8.1","ipfs-core-types":"^0.11.0","ipfs-http-client":"^57.0.1","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"548cfb215e8afa8dca64d3c38fa13feecbe577e2","_id":"ipfs@0.63.2","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","dist":{"integrity":"sha512-a4joQh9sSrBRoBl2NcCIu+42uIHiyOnx7hPij9VRbO8LlsuaMnhn1JrvvTKslMy3yUqV2z1Z1JGVC0e/POX2tA==","shasum":"55ef4dfe2707c891865c910f087b160f72dc4f2e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.2.tgz","fileCount":32,"unpackedSize":1612580,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2ce7E0oPxvkoMEJmVxDJSD/8xFMZtJ4vRcYh/X7InHgIhAP97HWtku8Xw1uCLQiz8FvaSXcDApwCmT+UOvjFXjbmS"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJil4LbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp8GhAAlISU343B6fFEbGSlHYybJBCK3gXHwYjMnU4EPLpoQJNJrhYV\r\nvho+C8ci0GVqF5MAqHHGFyUYSg8aR/E5sTHZ1XNtIed8GgHCoZzy90sP9ULr\r\nWpHEtbTloBZjT8sEhQyJ/dBGyBXIqLOjETehU62FEG7UPFjWOPyqNddPkV2w\r\nfpzUUl4vth3rb2dfaZVrfI4pvtOrExcvb/saPFN8gsL7tQCBhPUNUPrfbXHy\r\niGMLlpWIOS5Vf49l86gnr6n5uAnw+D63RCzxdcAzIgMq7K1UzIFoI9kLUuqa\r\nAoc/ZINYhC7uU12nvj1FkGY9pG47YWJCOW3eHhWS+FwNbxQ/sXKyTfEDhknw\r\nFSCHDluLu5bbrbAJrc/108S9sCeJvJsU5Yi2Mdnl7CKk65r6g7fLqQRzc3pU\r\nf2FeRHK9g402pUSGPVNqkXORPMJWcILRSVOBs/CGU1+PYI4VnI73lxN6i8Ze\r\nbu1bBtrgFiQPWDwK/8A1THS5XyUiR9SA7MMtLd1+ng+7aJ7IrtqDWUDROvfv\r\nP+E4hGYjfS2ku/tav/wKXathyiGvyVEhmn/Qh4F7Y3eW7Ugt8Qb5dZGzR61h\r\n+M0VMXCm7RYwlch1siTvEiZoR/wmkTxbBeF0ezC4icjHiBWPmgV9/Pd9SpCF\r\nKJsBY5r+Qc5EuLhU7qmA4tljd8BbX4l9qSg=\r\n=eeqP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.2_1654096603309_0.3457304387697129"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.3-70e142ac.0":{"name":"ipfs","version":"0.63.3-70e142ac.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.3-70e142ac.0","ipfs-core":"^0.15.2-70e142ac.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1-70e142ac.0","ipfs-client":"^0.8.2-70e142ac.0","ipfs-core-types":"^0.11.1-70e142ac.0","ipfs-http-client":"^57.0.2-70e142ac.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"1a6e6bef85bf35b9328b61ce15d312f1961f5fef","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.3-70e142ac.0","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (linux)","dist":{"integrity":"sha512-uVFd/gGUlJrr030/y7uuZXqq38kFUcVYuGb7Hrj7YGWQPrYAbF/OPAdQc7UGtuLicFL/1zMjWqTaAMsSXO8sQQ==","shasum":"8582489eae7625411dcfaaaee167cd59076a7628","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.3-70e142ac.0.tgz","fileCount":32,"unpackedSize":1616677,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+47Nh+WJRzl4aJGdLO4Y8xCHOSvqbuX1xwvx0HNhKIAiEAyhLTQV0rU9TnYhx3SpEOgdLZU2317ysoI1sjDXPrCO0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJip18uACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoXMg//boJQ53FTqSnP4LJYHAgJ+0jRjhx6G7tbYtfOYyw8YPvG8fH8\r\nNlWv8x/mMu4XgDmO2s2qKZ21D1ZSXhIUEMKNqLvpqYZZlDtn3T4AQm8vsw2/\r\nSVzwcOk+w6VSwbbNeyOU8VdPFdBe0D40rWVfS1FDTYfjhsFD7z30v1o/Miw3\r\nYlYVNbx7tssKo3+vXayq4ljj4RR/Vl5Iw/0IoFNQVevIjRW94O85H7SVM75d\r\nqtZbbC7UEQiaxXaOgDwg7TsBidtkNVQbPJI+juLJZl8bfYggxTMBLeXwZ+5h\r\nKfW91Y8pTLCy5qahOXrg+vpiP3w0RWllxrPfxkMZzPKqbfoFHtIUDWktEDYk\r\n3DLXt/BBHYhgTujwKsjWD0tfIcZNbxpQkXqNHwGbGXmTLCmjQ273o4d83k18\r\nIKXT2xtdtvDLKtn40WZAxphbVNFLDS77l4QTFrrV7PjncqEWfkHaN493f6/L\r\n02fpJh0ZJrpO05wfE8UZ8nEwlW64qYiU9uH2WoSHVR5UnDgijKQkI7F0FooS\r\n8HRCAhVLiLyHN3tmEnZ4w/fjnsYnoU6uzgAzy+3NJqThDLz7ZmdACckctF+Q\r\nYnVEK4MQiJt2amqdpakP49ycIocIZPbMa40ZXSbEgu9Asz2pNCHx1Y5ZfoZp\r\nGjIe8WjFPWkvlDZA9jU2xWeLeOApJ+EMUm0=\r\n=INQp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.3-70e142ac.0_1655136045976_0.35956642740959577"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.3":{"name":"ipfs","version":"0.63.3","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.3","ipfs-core":"^0.15.2","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.0","ipfs-client":"^0.8.1","ipfs-core-types":"^0.11.0","ipfs-http-client":"^57.0.1","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"0078aad85f92d7bc8e3a22eb9ef8efd257b439b5","_id":"ipfs@0.63.3","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (linux)","dist":{"integrity":"sha512-NWRsIP/rlyEKMr7N1CF7A0gWnK3hogLsWtKh3hUUAZHj6lQxxkGGvb03QmUDwJZLfg3bY/6c5y/wiFhjfNJJ0A==","shasum":"9abbd70ca8fc0a5409325a5a6ea87d8abd9a10d7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.3.tgz","fileCount":32,"unpackedSize":1616589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1RufV57/Q3r/o6SeSr2zOyJHxmu++poDl9t/+hPhxlAiALvXmlddxPN0rkHgm0dMkMHXVglN5HZa5JJcNJqHmGAw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqCncACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpx+w/9GC0luaYJ5Cb9/Ntyn7ScO6s1vCUh9mj/MT9ChYgPC3eF4g1j\r\nustfoY+GGwEoCOeS19xPhNv3qo4pyleH/xla+WLtKVZXbhDactV7Oezp/N+L\r\n4Dxp7ESpJRtFuRtLYT6JeYgQOngenET321l8OFxbOvc35azJGb5UWQZohJRn\r\nzWWrHK70vxiEIPKepJwHyAnvhK6xAJyzLvniA64LvYhSodsjOAX49QpK82Q1\r\nTzg+38gmgr70QhQHsVp8Z7OXBjvSJIkIXIxoCUCRkxlwq2BQF0tshX8W8R+h\r\nHsGSsZJHZ+EHniH1l097G5CAK6g8NbnMq9NSnD42moXB34ZtbI75b81dNYu0\r\nU92OIRjV9x34++/5nnUPQ6PsPS8PL3YJSoRtprnAYpOrie+1Cl1ow5nPj8+u\r\nZN80y9C8fPlWxBYDuALbA4YERdEiuQ6GVcgvPIHDIF7Cc2mUY82Od9S94eaH\r\nvKCZgNOoAHZalWdVZjS5xDsPtYr6L7CAgJ12oeX3e8ts6kriHXjFD1BT5X0+\r\ntUXwxMg1DzBk7nLUgdFYdy0+bBMfu5whinzAMN4610zGQqZl/jbLQGIR0a9F\r\nqoXMz6x/9+WMHb5J6hjsCxoC9eTI6qLHbJsLClYb2eqelJB1NEoCGnRdj1yV\r\nPsPa8vQgSbWkOzsAUaRWT0NQd8QmYj9Y0cM=\r\n=VZ6D\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.3_1655187932391_0.7570238485789291"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.4-7be50bd1.0":{"name":"ipfs","version":"0.63.4-7be50bd1.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.4-7be50bd1.0","ipfs-core":"^0.15.3-7be50bd1.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@libp2p/websockets":"^1.0.8","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1-7be50bd1.0","ipfs-client":"^0.8.2-7be50bd1.0","ipfs-core-types":"^0.11.1-7be50bd1.0","ipfs-http-client":"^57.0.2-7be50bd1.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"8d1e141b6d72e6dca9162859d36425eab90d8b12","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.4-7be50bd1.0","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (linux)","dist":{"integrity":"sha512-QHUO6MRB6SwQ1CUNH/PqmoxHy2d9qpycNOUGCbS03hFWJUpTHp2VtRsv/a2onPL+E/p7Xz8fheUJx22j7G6s9g==","shasum":"b6583d5f0e99dd4980d8bcdd95cf9a6fb87d099d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.4-7be50bd1.0.tgz","fileCount":32,"unpackedSize":1630499,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLWmE8IYVtkIIdw2HqzsVvMdnLLaZRT7MuocjT7WVDDwIgUF8QXbNBlgkPL6UspdZ615Tm1igBjaFI2HqKdNSO6YM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJis1YCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoh/Q/8DyIc3dnk81mgwK6JDXKk0iElvTqzbQrZ5Xdi5zTJhUzvwgHk\r\nAEQrj0Jojd94P99kvTYh/0JX6CFZSufZDojHhvrcYtSrFsOj8ZoSNiAqyFix\r\nYwseUA0eoZnZp9blHKZmC75cBY+Nxer/2bUWoEtt2+fiRF6ZNyyTMHKtepBO\r\nAK7+bUx+J2wnFBb7CzAO2wfVR3RpPDtdfc/34Q0OiwgS0E1usWVMb30yOl9s\r\nNAYNDBPRYG4r6rsVhzTYVlw4EkFejN9tFgDmbDOKd+tOhr0CPOtsJJLhv4Ge\r\ng/D7u9j28uApWqoS2ZkAF3+QiHLhlfsTb/CHq6tkVXj56UBbHeCj+Jzaqm7+\r\n16s95+SmKv1IoRTFbscq2moR6hkTiaorwVmjM3vYD5uGrDwMa8K7YJFAJwHV\r\nSI5LnDzTItzZFy9zS4LqlQny0aIIoIMq49kh4cUIlJ8Vtfv7ajozsqxpgaWU\r\noRktrdYIRxhzLH9bC7oZVCVJe/Yt5V8YyVgojxKU36FPxtEtNdt7WSH6O5ZZ\r\nGS9Net//32vR18Mx5YmsQvZozCWXUAIU4sbFkE2VHyIXVEllkIq3/pfUELI9\r\nGlgLOvpW+kgVlDR9aM7ZhMN+CkqaUYGSN/CqpUi2fZ27uSP3UglICgPrlD2D\r\nd426OIzOBvPNbMCgxBBJmUCzYsY+b8vxGlQ=\r\n=OpsS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.4-7be50bd1.0_1655920130599_0.8134363447669903"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.4":{"name":"ipfs","version":"0.63.4","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.4","ipfs-core":"^0.15.3","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@libp2p/websockets":"^1.0.8","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.1","ipfs-client":"^0.8.2","ipfs-core-types":"^0.11.1","ipfs-http-client":"^57.0.2","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"c1cbc810679405d5a5c0fcca0c5c7aaf023b2d22","_id":"ipfs@0.63.4","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (linux)","dist":{"integrity":"sha512-myUlfE6ZIcZWBvllyYvJVX4GQhnhZiklB84DPDaJcCR2iw5P6242hV36kkmbRu6yvhJl7xhocdMk8ZylFN3d4Q==","shasum":"071c12082f0478347fdf773182dbfbffb22dc014","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.4.tgz","fileCount":32,"unpackedSize":1633118,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9bm3UwJIt0fsTH4d7PAu2jSPdb/GEd5ZdlB1CjYNqzgIgTa/8oxEpy2Otai10fRsNLXgdMocfsY9uakaNopm7d2U="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitFaUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq62A//W/NZ3BlOtrDWZYGGU/kTeqDO6lyGB50JGhpZIP87Zp0O9X4y\r\nevPHJ+sYkfexdHCyUg++0KztQS3NJvPEyObPqq0wBudKNDRqG/OcHWezEvxi\r\nRKFUY9fglbAJgCWSMPJ8TegWMioQDbWQgQRpFXhjP6+l561pGCP73Jtyn9qd\r\nKSTSV+z47Esusy7HmgMQx1xLIP3DLhwueDb/zXn8J8dE0avUBhA4eFUFdNV5\r\nvr5rkqey9jusDKY2Zdw0e6SQXFeHHzWli1PprpSHxEuDazfFvw1AEjLsKOxk\r\nXSJv6cGjtOogJNCL9QLJb/NDt2PWGjgHSfUnxW9zgIKjcCJkxXbt5RuOJsrB\r\n/r3/QQs4xqY6R21uUv+XjHlHu0ZAs2P80lq0jGxjhhykfxDBHPpSJZ8slAvH\r\nmaMS5sy8IAIFwe37jPddXJgSbaO4MK3rkzy00qnDiMH2JhPxNr0iZyGPUqRe\r\n7JSEgRBoJrwDZZgL/nBmpM6vTKKpzUjh/MwGFc5cJ8iVhaSzX0KgbYqwqIvv\r\nhL90tZ+yv5DIa4wTu4CdzKgqvhKM9FLJz+ZuXucpWASP2RJ06Y3hw5tneq7x\r\nnmwgsIfqhzAPBFYskKQ3IVuWNsb7N5zvJ/rEMpk6WghdejuhVCRngP1cgFFT\r\npYbYaDdEguY8ztG8Wj8ZEwt+rnJsOGA4Mns=\r\n=20XU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.4_1655985812227_0.6587821075649152"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.5-00bd3dd0.0":{"name":"ipfs","version":"0.63.5-00bd3dd0.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.5-00bd3dd0.0","ipfs-core":"^0.15.4-00bd3dd0.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@libp2p/websockets":"^1.0.8","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.2-00bd3dd0.0","ipfs-client":"^0.8.3-00bd3dd0.0","ipfs-core-types":"^0.11.2-00bd3dd0.0","ipfs-http-client":"^57.0.3-00bd3dd0.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"5e5669eefa320838c4810adf62356b0039209ed2","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.5-00bd3dd0.0","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (linux)","dist":{"integrity":"sha512-LuEQxhdyb9gXLOzJOeuYr6rtrklj5U7O5YlRC84EUHagbNjsCVbIr3lsYM17PZNsPhUjk4l06zhx9Wnp9E7fZw==","shasum":"fcaf01b356d09c39bf965c95ebbe2016e1b9e8f6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.5-00bd3dd0.0.tgz","fileCount":32,"unpackedSize":1633187,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHql0dGh7gUGuEKq9F81tAE40V1FbCb1MzaZi+qsLCPVAiBr4LIDncOc+nhHXO+LtkVGVIHEuqzIs3oglZmfTPw0UQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitYRVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQsA/8CUtkowE8FUnNttTcRqOvEeT7xK87DgKwNE8f/IhUpyAYjWNM\r\n3OnL8iA1T1/W0svJ3xiFHwMOI1tmQ/lRF4l8AlIhaNuDQ20/KQcek03QHfEH\r\nXVAdhpf+Si/QU4jqlf1c6FOZUj7Ycc/kwRtF5nVG2DmagxzaOY9RQmEj7+Vb\r\n1kjqGcqqje3YgavyVb6LyWEf4Crg0GSMYdGb7sjS+dpcmsDfE6QmAMWQcjJt\r\n0Md9DvacLI9+rBPxzkh03E1kZ/okVlXHPuk+f7upNs6XgEZFNIJ7NQKIra0p\r\ndUa7CROA34z/KLoMbiSvK8vG3205SithEoPC56GvEp4ZQkQJhfXDqHc6dB/P\r\nA3TzCpKjTeEun35VORkgc4mlUj0XXuHUS0Gw6eU+BS5e5pxaYkHQvUmedCtf\r\nSHct5/mud8nXEpyMbjor16CWYp+bRHYmC7RPt44onayErJq1PgeNXPwngH9A\r\nJH7Hu2YF/L6ZUlHfBy8JC01I+29PgbUdkSlt4B37g3TxqQFkLz7PcWYDyzyp\r\n2CKj84L+79n+cgyGAe0OBZPKk/4Z+FycjZVfV26dbPvw8k50fpRHS751cggi\r\n5NTD3obnc34H5RwgpCVLXfAw60UC8kVl/XYp/OHHTsmYhuiZUW1Yljp04xDz\r\nMnl24XSMKhGlI3Kxed6YruM/OHUuqvvbHWk=\r\n=Md89\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.5-00bd3dd0.0_1656063061015_0.19148138351539945"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.5":{"name":"ipfs","version":"0.63.5","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.5","ipfs-core":"^0.15.4","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@libp2p/websockets":"^1.0.8","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.2","ipfs-client":"^0.8.3","ipfs-core-types":"^0.11.1","ipfs-http-client":"^57.0.3","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"965f5a4e00254cee48fca2127d95209deaee09cf","_id":"ipfs@0.63.5","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (linux)","dist":{"integrity":"sha512-Tksul2OBCcohNCLjRimHfbK2philVPj9Cg8abieZxY0WN/PyKirCA+vnicmEFRWYYaUbqu4kORba3+nv4snhIg==","shasum":"91a3ced8523969f1cd9268d5c57998d7c85b724d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.5.tgz","fileCount":32,"unpackedSize":1633099,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFCPQddLhbOMxqZjz63Py0tp1pYy1PvbDzOMLBZjTUcXAiEA+PcytVzhuPFP45XwnPjn5zZW85QEmnm2s6Y1GeQgtfw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitZEhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpIdw//R6dayVSr6jSTe++i+JHRYmxComlV399Ma/wGUN4Wp/XL4OAE\r\ntd2TlXdghCp+zRp4hbqdX/oA6JpMtF425c8veUv9VtNF04Y7jCzeixQqViic\r\nUtOCc3uG4pyLldvPU8wXq/B0TUSFd0M9atIUPK7acLPRg0YwJxZdsm958Sc5\r\naNsj+nWtEu5kqbTcWIiWgFqeys+HUAVufORBhiaM+dgVtRjV7r+YqH+vykF7\r\nPSkeoxi6VLMd14a28WH+Api6oGYhPeT18wxhbOwCZozMSbDg+HYNcezOl2TP\r\nS+mUr7D0UpEs07cVFpj9O/9W+VFFf2qgSzkWb7axPnw/vtTdg+jU6qsrrhoR\r\nnAvW10ufjDbhB2/O7Scbq8WQHlO7rQxWXLrJJ3ne+chpHYkOe4nZF6RjfhBx\r\nwEzylhZHN6YtIwVtN0LS4UtUytVG5ew0DtaxeivaSArYsKELjOPlChvmSbWc\r\nj/gFqgwHu/jx9UbWDIjoG1KshtPCjz+opdSfQgmYELGkutlp8HWZA1hodPOE\r\n7T9bJH/iOjixXIwmvJ6OWnUYy3xrIMc38chyL51xI1EhaHMioiLxOGg3RXh+\r\nlbwqnkDwoj/mZvE7WfeC2HFqxMV+pB7LwJMJKRdjQdg6yxl9sMXB7pVH1Qbp\r\nMd/qa4kkGsg4SNf6O+cJsuSefXP6AjliRcs=\r\n=OkjW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.5_1656066337649_0.8718205861306345"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.6-a05695fc.0":{"name":"ipfs","version":"0.63.6-a05695fc.0","description":"JavaScript implementation of the IPFS specification","keywords":["IPFS"],"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"(Apache-2.0 OR MIT)","type":"module","types":"dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"exports":{".":{"import":"./src/index.js"},"./path":{"browser":"./src/path.browser.js","import":"./src/path.js"}},"bin":{"jsipfs":"src/cli.js"},"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^1.1.4","ipfs-cli":"^0.13.6-a05695fc.0","ipfs-core":"^0.15.5-a05695fc.0","semver":"^7.3.2","update-notifier":"^5.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^1.0.3","@libp2p/websockets":"^1.0.8","@types/semver":"^7.3.4","@types/update-notifier":"^5.0.0","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.3-a05695fc.0","ipfs-client":"^0.8.4-a05695fc.0","ipfs-core-types":"^0.11.2-a05695fc.0","ipfs-http-client":"^57.0.4-a05695fc.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^11.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"engines":{"node":">=15.0.0","npm":">=6.0.0"},"contributors":[{"name":"0xflotus","email":"0xflotus@gmail.com"},{"name":"A_A","email":"21040751+Otto-AA@users.noreply.github.com"},{"name":"Adam Uhlíř","email":"adam@uhlir.dev"},{"name":"Alan Shaw","email":"alan.shaw@protocol.ai"},{"name":"Alan Shaw","email":"alan@tableflip.io"},{"name":"Alex North","email":"alex@alexnorth.me"},{"name":"Alex Potsides","email":"alex@achingbrain.net"},{"name":"Andrew Nesbitt","email":"andrewnez@gmail.com"},{"name":"Andrew de Andrade","email":"andrew@deandrade.com.br"},{"name":"André Cruz","email":"andremiguelcruz@msn.com"},{"name":"Arkadiy Kukarkin","email":"parkan@users.noreply.github.com"},{"name":"Arpit Agarwal","email":"93arpit@gmail.com"},{"name":"Arpit Agarwal","email":"atvanguard@users.noreply.github.com"},{"name":"Ayush Mahajan","email":"mahajan.ayush2306@gmail.com"},{"name":"Bernard Mordan","email":"bernard@tableflip.io"},{"name":"Brian Vander Schaaf","email":"bvs330@gmail.com"},{"name":"Bruno Zell","email":"bruno.zzell@gmail.com"},{"name":"CHEVALAY JOSSELIN","email":"josselin54.chevalay@gmail.com"},{"name":"Caio Gondim","email":"me@caiogondim.com"},{"name":"Chance Hudson","email":"jchancehud@gmail.com"},{"name":"Chirag Shinde","email":"chirag-shinde@users.noreply.github.com"},{"name":"Christian Couder","email":"chriscool@tuxfamily.org"},{"name":"Dafeng","email":"dfguo.joe@gmail.com"},{"name":"Dan Ordille","email":"dordille@gmail.com"},{"name":"Dan Shields","email":"35669742+NukeManDan@users.noreply.github.com"},{"name":"Daniel Buchner","email":"danieljb2@gmail.com"},{"name":"Daniel J. O'Quinn","email":"danieljoquinn@gmail.com"},{"name":"Daniela Borges Matos de Carvalho","email":"alunassertiva@gmail.com"},{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"David Gilbertson","email":"gilbertson.david@gmail.com"},{"name":"David da Silva","email":"dasilvacontin@gmail.com"},{"name":"Diogo Silva","email":"fsdiogo@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Dominic Della Valle","email":"ddvpublic@Gmail.com"},{"name":"Dzmitry Bachko","email":"dbachko@gmail.com"},{"name":"Enrico Marino","email":"enrico.marino@email.com"},{"name":"Faheel Ahmad","email":"faheel@live.in"},{"name":"Felix Yan","email":"felixonmars@archlinux.org"},{"name":"Francisco Baio Dias","email":"xicombd@gmail.com"},{"name":"Francisco Baio Dias","email":"francisco@typeform.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Gabriel Garrido Calvo","email":"gabriel.garrido.work@gmail.com"},{"name":"Gar","email":"gar+gh@danger.computer"},{"name":"Georgios Rassias","email":"georassias@gmail.com"},{"name":"Gorka Ludlow","email":"gorka@aquigorka.com"},{"name":"Grant Herman","email":"grantlouisherman041@gmail.com"},{"name":"Greenkeeper","email":"support@greenkeeper.io"},{"name":"Haad","email":"haadcode@users.noreply.github.com"},{"name":"Haoliang Yu","email":"haoliangyu@users.noreply.github.com"},{"name":"Harsh Vakharia","email":"harshjv@users.noreply.github.com"},{"name":"Henrique Dias","email":"hacdias@gmail.com"},{"name":"Henry Rodrick","email":"moshisushi@gmail.com"},{"name":"Heo Sangmin","email":"heo@mapiacompany.com"},{"name":"Hugo Dias","email":"hugomrdias@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Irakli Gozalishvili","email":"contact@gozala.io"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Jade Meskill","email":"jade.meskill@gmail.com"},{"name":"Jessica Schilling","email":"jessica@protocol.ai"},{"name":"Johannes Wikner","email":"johannes.wikner@gmail.com"},{"name":"Jon Schlinkert","email":"dev@sellside.com"},{"name":"Jonathan","email":"jkrone@vt.edu"},{"name":"Jonybang","email":"Jonybange@gmail.com"},{"name":"Jorropo","email":"jorropo.pgm@gmail.com"},{"name":"João Antunes","email":"j.goncalo.antunes@gmail.com"},{"name":"João Santos","email":"joaosantos15@users.noreply.github.com"},{"name":"Kevin Wang","email":"kevin@fossa.io"},{"name":"Lars Gierth","email":"larsg@systemli.org"},{"name":"Lukas Drgon","email":"lukas.drgon@gmail.com"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Marcin Rataj","email":"lidel@lidel.org"},{"name":"Marcus Bernales","email":"mboperator@gmail.com"},{"name":"Marius Darila","email":"marius.darila@gmail.com"},{"name":"Mark Robert Henderson","email":"henderson.mark@gmail.com"},{"name":"Mat Kelly","email":"machawk1@gmail.com"},{"name":"Michelle Lee","email":"michelle@protocol.ai"},{"name":"Mikeal Rogers","email":"mikeal.rogers@gmail.com"},{"name":"Mithgol","email":"getgit@mithgol.ru"},{"name":"Molly","email":"momack2@users.noreply.github.com"},{"name":"Mounish Sai","email":"pvsmounish@gmail.com"},{"name":"My9Bot","email":"34904312+My9Bot@users.noreply.github.com"},{"name":"Nick Poulden","email":"nick@poulden.com"},{"name":"Nitin Patel","email":"31539366+niinpatel@users.noreply.github.com"},{"name":"Nuno Nogueira","email":"nunofmn@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Oskar Nyberg","email":"oskar@oskarnyberg.com"},{"name":"Pascal Precht","email":"pascal.precht@googlemail.com"},{"name":"Pau Ramon Revilla","email":"masylum@gmail.com"},{"name":"Paulo Rodrigues","email":"me@paulogr.com"},{"name":"Pedro Santos","email":"pedro.santos@moxy.studio"},{"name":"Pedro Santos","email":"pedromiguelsousasantos@hotmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Portia Burton","email":"plburton@gmail.com"},{"name":"Prabhakar Poudel","email":"yuvrajzohan@gmail.com"},{"name":"Qmstream","email":"51881352+Qmstream@users.noreply.github.com"},{"name":"Raoul Millais","email":"raoul@raoulmillais.com"},{"name":"RasmusErik Voel Jensen","email":"github@solsort.com"},{"name":"Richard Littauer","email":"richard.littauer@gmail.com"},{"name":"Richard Schneider","email":"makaretu@gmail.com"},{"name":"Rob Brackett","email":"rob@robbrackett.com"},{"name":"Rod Keys","email":"rod@zokos.com"},{"name":"Sangwon Hong","email":"qpakzk@gmail.com"},{"name":"Sid Harder","email":"sideharder@gmail.com"},{"name":"SidHarder","email":"softwarenavigator@gmail.com"},{"name":"Stephen Whitmore","email":"stephen.whitmore@gmail.com"},{"name":"Stephen Whitmore","email":"noffle@users.noreply.github.com"},{"name":"Steven Allen","email":"steven@stebalien.com"},{"name":"Tapasweni Pathak","email":"tapaswenipathak@gmail.com"},{"name":"Terence Pae","email":"terencepae@gmail.com"},{"name":"Teri Chadbourne","email":"terichadbourne@users.noreply.github.com"},{"name":"Travis CI","email":"travis@travis-ci.org"},{"name":"Uroš Jurglič","email":"jurglic@gmail.com"},{"name":"Vasco Santos","email":"vasco.santos@moxy.studio"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Vincent Martin","email":"vince@finalatomicbuster.net"},{"name":"Volker Mische","email":"volker.mische@gmail.com"},{"name":"Xiao Liang","email":"yxliang01@users.noreply.github.com"},{"name":"Yahya","email":"ya7yaz@gmail.com"},{"name":"Yole","email":"yole@ultiledger.io"},{"name":"bitspill","email":"bitspill+github@bitspill.net"},{"name":"datafatmunger","email":"jbg@peerparty.org"},{"name":"dirkmc","email":"dirkmdev@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"},{"name":"greenkeeper[bot]","email":"23040076+greenkeeper[bot]@users.noreply.github.com"},{"name":"greenkeeper[bot]","email":"greenkeeper[bot]@users.noreply.github.com"},{"name":"haad","email":"haad@headbanggames.com"},{"name":"hapsody","email":"hapsody@gmail.com"},{"name":"jbenet","email":"juan@benet.ai"},{"name":"jonahweissman","email":"19804455+jonahweissman@users.noreply.github.com"},{"name":"kevingzhang","email":"kevin.zhang.canada@gmail.com"},{"name":"kumavis","email":"kumavis@users.noreply.github.com"},{"name":"nginnever","email":"ginneversource@gmail.com"},{"name":"npmcdn-to-unpkg-bot","email":"npmcdn-to-unpkg-bot@users.noreply.github.com"},{"name":"reasv","email":"7143787+reasv@users.noreply.github.com"},{"name":"robbsolter","email":"35879806+robbsolter@users.noreply.github.com"},{"name":"seungwon-kang","email":"ksw3894@gmail.com"},{"name":"swedneck","email":"40505480+swedneck@users.noreply.github.com"},{"name":"tcme","email":"hi@this-connect.me"},{"name":"victorbjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Łukasz Magiera","email":"magik6k@users.noreply.github.com"},{"name":"Максим Ильин","email":"negamaxi@gmail.com"},{"name":"Xmader","email":"xmader@outlook.com"}],"gitHead":"06da5952a6d61e890ae37d305b99a5f174a1555d","readme":"<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">The JavaScript implementation of the IPFS protocol</h3>\n\n<p align=\"center\">\n  <a href=\"https://riot.im/app/#/room/#ipfs-dev:matrix.org\"><img src=\"https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat\" /> </a>\n  <a href=\"http://webchat.freenode.net/?channels=%23ipfs\"><img src=\"https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat\" /></a>\n  <a href=\"https://discord.gg/24fmuwR\"><img src=\"https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat\" /></a>\n  <a href=\"https://github.com/ipfs/team-mgmt/blob/master/MGMT_JS_CORE_DEV.md\"><img src=\"https://img.shields.io/badge/team-mgmt-blue.svg?style=flat\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n> **Upgrading from <=0.40?** See the [release notes](https://github.com/ipfs/js-ipfs/issues/2656) for the list of API changes and the [migration guide](https://github.com/ipfs/js-ipfs/tree/master/docs/docs/MIGRATION-TO-ASYNC-AWAIT.md).\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Table of Contents <!-- omit in toc -->\n\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n\n## Getting Started\n\nWe've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..\n\n### Install\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n* Visit https://dweb-primer.ipfs.io to learn about IPFS and the concepts that underpin it\n* Head over to https://proto.school to take interactive tutorials that cover core IPFS APIs\n* Check out https://docs.ipfs.io for tips, how-tos and more\n* See https://blog.ipfs.io for news and more\n* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThe IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n- **Join the [Weekly Core Implementations Call](https://github.com/ipfs/team-mgmt/issues/992)** it's where everyone discusses what's going on with IPFS and what's next\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)\n\n[![](https://github.com/ipfs/js-ipfs/raw/master/packages/interface-ipfs-core/img/badge.png)](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core)\n","readmeFilename":"README.md","_id":"ipfs@0.63.6-a05695fc.0","_nodeVersion":"16.16.0","_npmVersion":"lerna/4.0.0/node@v16.16.0+x64 (linux)","dist":{"integrity":"sha512-MUlD4crvagbanEz203u0FAD2N+yC+wvx8zljk0P7QwZFIu+s2FatOyELcElPwgxvycwsMDIa9lZvMbpMirF5vA==","shasum":"adbe33e91f0ed30b879d448eec19fa37379a56ad","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.6-a05695fc.0.tgz","fileCount":32,"unpackedSize":1634772,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPLzRqJM9czorbJ0qG60iwO7FPJgIDvoBpeA3Q3eGWOgIgHE3fn2idFD7CNGriF/pde+s0l2HMRXh5Cj/gu25zqxU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2AGXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo/3A/9EX2a/tBZuRO3rH6F2VMnQHmOrGPEekTOB3X8tdu0IpfVFgl/\r\n7q7TQItBb9KCmKQ+RhnS6w0Ild1D9v1R81HJxWY6EUsduQ/F9lDRZnHz9yJC\r\n6gxmRJ88+cMhURVALArk3D8spusFVlwah1mQFWLMLMo7oo7XWQ0hBUB6FExL\r\n1nhs5xOoBLSgISIlxUq6ihFVIg8qOe3kaNSIGWANjDl+lhTJi9teK+EWYofB\r\nOi3RRQqoP5WfxKA8yFxalXi2e/pa56OWB5SGVeU3qntGu+wJ46vY+umU7fo/\r\nUeuWEWju7XihWtxbbGed8psb3j7TGZIPghBSkUAGjtlMvmEiN/tHTh2uLUPW\r\nlkF6SEA9aCNhthraytZ+TpIKMAApj5fVQqrnpSPZAR460saP2mVnkQJlVLSL\r\n091XI9G3/adSSK0AN6dsj7Sq+EPFq9AFKirAEuwEMjsvoUYpv02fADaSgypz\r\nqSoQce4+KnKrx8Y02Omd8Ox8xpNq3mOq55D1K+piOs2HeWqr0k39x2EZLKzv\r\nkQVccEFm2Kto5XObcUE5DhT3fkU9y7orOfkHiRfDQSiYv63wud9TOLpIC/4/\r\nOinNJ4xrrdQm/QN8PZDLLK99wfptSzMNa6XXOvexuHauXggpM03P8T43pT0v\r\nf1KbaS+WCeyikUn+QXoN19qtkfAU7zcdMMA=\r\n=J9Aq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"achingbrain","email":"alex@achingbrain.net"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.6-a05695fc.0_1658323351219_0.48991381471255835"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.6-39dbf708.0":{"name":"ipfs","version":"0.63.6-39dbf708.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.13.6-39dbf708.0","ipfs-core":"^0.15.5-39dbf708.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.3-39dbf708.0","ipfs-client":"^0.8.4-39dbf708.0","ipfs-core-types":"^0.11.2-39dbf708.0","ipfs-http-client":"^57.0.4-39dbf708.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"a2f1f57d7993d04b2d19c3d7ecbeecc95a54d2ae","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.63.6-39dbf708.0","_nodeVersion":"16.16.0","_npmVersion":"lerna/5.4.3/node@v16.16.0+x64 (linux)","dist":{"integrity":"sha512-u9AuCW/X8fuQYTHkAns4K8kIB0cNSacBypVIfu0PPGXmZJaMiBw/0WX+b4FnrbTtBIdkdpqMk1zSeUSqV0HVCQ==","shasum":"73532334c45efb6993bf7615494c0eb80f61039e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.6-39dbf708.0.tgz","fileCount":19,"unpackedSize":1621186,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0x8vpv2caETwHRcV+YASgNkPfkpXQZ3u1aGIhVA3TlQIgZu+GE6GT8CeTW8mKQzdso+gHQVWRLvIbEzFWjqqhlo4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/WDxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrOkw//Tw2uXTlirNn8mlr6TUfDG2/yOBEJgHNfoEee/r0/dgiDbj6t\r\nhL8XsRdc9TJz714Z/Cz1O9rUheP3AlzNFxXPGAWlpnMhqILyPNNBx7MAzvVr\r\nQYKQdBscK1nES6EoyRDprWtPcTc0lDC/8BdHMSCfnmRqIkYArJHXPk4RBTjU\r\nm9psG8HD2Uzo3pZse2XjApPM09mpneoisfUQ0MFP83/iL++ZTrQOPQAB2ghH\r\nW9pNuOO47gbeH0XAMB3ameWd6hKgrFOnimtDfKAl1Vku9Bq3+5XxZWioYapn\r\ne4NiHeqGDLseCzTXgPSTt1RbIWCOuvXFF4yHbDZ00HESSWdRNQMWb0i/NfQI\r\no/R+CIEdfGlhuLIRbMdp/obtG0jqI+j1UNmNUTpD89XOJWqM5cMVZHXmD/Dh\r\n+H0uBwbMSGjM4ShiZoQxRifXk2puM8KV+C1cBAjeFhYgMIMWPdKoJBKPi1C4\r\ni6Qdy0Vbmpdsf+a62/lge4Shi5UudJfo6Io3wUEAFWVFXlhU9/PuAtn+qc3I\r\n1IkDbJE+XI4Gw8zypTeP29jNU5ZjieAO7PLE4lE2CV3VR+8v4wmBkpxAlbiX\r\npGumhZ6giY4DgSKOjLNL1cJsVpMYkgC53yiEhYrjJGMR3XdObuR/JVI/cvYM\r\ncwk3owRR9E2ujAbYs4AWNny1zvs5rwmsceg=\r\n=ZI1P\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.6-39dbf708.0_1660772592508_0.5701796289985988"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.6-8f351a89.0":{"name":"ipfs","version":"0.63.6-8f351a89.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.13.6-8f351a89.0","ipfs-core":"^0.15.5-8f351a89.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.3-8f351a89.0","ipfs-client":"^0.8.4-8f351a89.0","ipfs-core-types":"^0.11.2-8f351a89.0","ipfs-http-client":"^57.0.4-8f351a89.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"59229f179fc680ee9075d2cc8deeceb7ff1b27d8","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.63.6-8f351a89.0","_nodeVersion":"16.16.0","_npmVersion":"lerna/5.4.3/node@v16.16.0+x64 (linux)","dist":{"integrity":"sha512-cMXjbeI2T98lPnE+3zZ8n7rPZobl9Q+HWHai7U99AHPvZli/pumz85DtHiMBmN0GuoKmRV5j93q4j2aRqibEcA==","shasum":"caf007f792f914dde6539d53baf095d937dd47e0","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.6-8f351a89.0.tgz","fileCount":19,"unpackedSize":1621186,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDlCLT16EsdL2HUWdPRW3UUdrok9kIEUP6XdMBIrzxNQAiAHATubGu4xf8oQN2H+A9kTMa0RVflqkUti8yiCY/dfCA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/XdpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHkQ//VUImAduDz9RURXlT0ElzyVFHtflfDngatxqXNLNJTJaNTSBQ\r\n7tv8itz1yuAeNNg3YOolDOV9uHuOMUuYJT5dVw+69oUJ8rt5SdZg2Q8Litqd\r\ncBzzGICwDxg3eOt7RX0mQrCgP+iGxg0s4zNG1FUma0GdZXZPTALpOcBE1LyT\r\njU5QSh8jasJcCnJeDNrLY9W4szWgBKpk25Or++V814FEtwzQAjLByV9GUk1b\r\njpIa4z5HxWLfa9sXRG2krfSXGl1JSYHlnk21QZyJBkEfn5ro0B2GB5enNFHZ\r\nOhwqizToU1nGxD4OKeTjFGx6b260nYW9ytEY7nmGdl3Huu7kldG0+gJq+f0M\r\nWTGoxwyGHcn+9rlAUo7/xtEn19Qq5u+QP/o7yi1Tet6WWwEl8F3uuhIMWU8t\r\nUog6uwAid9MQXJsWNh12zBi4Z547Vd3GF8wNeZDLKXAYaYmdkvEWOwQgBB6l\r\nGHREmOpWmJaKJQGajrMqI4JZSRordf/r7ejnQrMIQz74zbDsQcANzs5r4u/f\r\naDGE/aYZI8LW700oCp4G2AAorlYH6s3Dv8PKr6IFaYvvTqg4jgK3hTlw3y0g\r\nPvo4ihIwhxR2vKSqlVPyzBPBOJOIZNiN+t9REhVWuwLlVN07luJwyyLW2u9d\r\n3wMVAS/erhXbrIRo8jjBNCviczWza4yatg8=\r\n=KRgX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.6-8f351a89.0_1660778344924_0.13631604321835944"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.6-83f9882e.0":{"name":"ipfs","version":"0.63.6-83f9882e.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.13.6-83f9882e.0","ipfs-core":"^0.15.5-83f9882e.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.3-83f9882e.0","ipfs-client":"^0.8.4-83f9882e.0","ipfs-core-types":"^0.11.2-83f9882e.0","ipfs-http-client":"^57.0.4-83f9882e.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"368c95b50c87246f0c5b143b79deaa4329d0727a","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.63.6-83f9882e.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.0/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-Yra2erVkA8mlcwxp5ui1+EBW7b0RR/6skWirfRFC+aokbHnepB3mglGUrhKKScw9i7xFFZaXdQOirByCOufwOw==","shasum":"ac036d845be13934fb22a5ea76f625da9782a0d7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.6-83f9882e.0.tgz","fileCount":19,"unpackedSize":1623120,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICeXIgN4zisGXS3x/5VWmbuRfS560MEwdxRDTGbDqbplAiEAslI87fy65SAuH/VE1uvJ8pkBYvoEBXBagLQQXebkKeo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFy9rACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIPQ/+Od7i8OuvgTTveW1sVYGR43NlBRe+9xK7XUXo6h7L6Mms/K8J\r\n1mYwM43kKv7XLZEsIqn/Pf7M1KF8ybOLZEZz2iz9WpfEc4dCdOpRF72L2xpr\r\nEqXCvobu9U0ucVmVcmHfjlyNF7MG7FGoBJYf4Eu7YT2F9OXKxIgSVBmojhKo\r\na92xOp+3rX/kHKkOf/57xJdMc5C4l06f3JvjcCYFymmi+4hCrP8VY4GBZkOx\r\niZciV11YuM8Qf6hCldLt/Uf01XcRhT0FI1h+vPbpwEO7XHYzGY6s6ALc7lFc\r\noQZz0FQKu5dhiUYcpXvJORsqduyPkNEWOHLY1fMmtvaoVbX6pFsAnoOIJop0\r\n1knRxsgfJkd5EfvkpF037CQdYkoO3mk1RtpV5wVgQQCgIe9mReZmJm65ll9m\r\nHOIrd0uwGZuocGTkbD/0xIi33/36b0ia8dGk4XKQYdh8dTXkYzLu9riO8tk/\r\n6rNg9XjTmoA1+cnVmNbTHUJoFgR2q2WStS0NZmzP9dyO9sSXDpvLeemQL8eQ\r\nvuZK560eiavVDdlLDJL1c6gTsfWcmLLOSPmWgK31k52G8PZ2Evc+X2WE/n+d\r\nc20NnylNK9WLO8gT8GSO9bvvZ1qh5OByyK269BGs9OeRMCMiwKK/LtTuOFlM\r\nOiSSr48G8xFSfs8qeOlIAKDVq2/GCKJIKLU=\r\n=SIBe\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.6-83f9882e.0_1662463851499_0.028844148263780234"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.63.6-051da161.0":{"name":"ipfs","version":"0.63.6-051da161.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.13.6-051da161.0","ipfs-core":"^0.15.5-051da161.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.155.3-051da161.0","ipfs-client":"^0.8.4-051da161.0","ipfs-core-types":"^0.11.2-051da161.0","ipfs-http-client":"^57.0.4-051da161.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"262c2c4e56b8de0c602251e9ea0ac3546fd2e28c","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.63.6-051da161.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.0/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-MVgogVLeGy55WeyBHfGdv2P35pHuAY/6iXI+PuZrIpkbCrqgkLmQXZke5p8VEZjb9Wu+lzgtvkUpJCIZX1u4mg==","shasum":"4fa9f5f9108f034e82aaa0a82bae5743e44d2dc7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.63.6-051da161.0.tgz","fileCount":19,"unpackedSize":1667957,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOxjWiQ44gQ2V/txJSWaG0HuFSzSvbttlTPbk+K2+nJgIhAMxvTDQmfwnsz4Xt0nBVAs3qhvXEfCEFYjvg2zx9tqLq"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGJTWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqCshAAkk8YmzaIhzq1g0KvDM0EuCDfrw5uM9G/jjgvwgx8oFQzOm8+\r\nmA1BxR9XoM8GcqTcaxcx1IbH0AjKHKQ7T6laI5XY0pMfs++6M/DAgnaM3vmb\r\nHGTozJYngsDP1ThJlro6SEsnh6Uh5d23gCx2q1cj3ZPP9NQ4fj/5iQhHhR1K\r\nsJ9pS07hqEpf7M6OZvmr1RtN7DW4bJIbXkFk3rMfq8g3oPp4IQQnJ8rybXAl\r\ni8/NakB3fbcukU2OXu7gyWzMqf88lad1W5UooPrD+gFbqfCZrWvOWs3WRPqM\r\niJojgIVxIB12z6PoU6dSOfTeGJ7E8jhd5yHexnHqhGNhrfZvnE6KyzJSWT+2\r\nHtifkeYYrPqpTXgwMhhLSi0fyY9y4wIaag+iCD0JwpciqUVKJq1EjuUNeHJO\r\nPLHYUqPpG8IBHXU2sjBBj7ncav/KljFzZiHAAK5lwCU7JpX0ESbvlQ/yMQ7w\r\nnAKEWe1dzjiQSpEobY7ggMWvGwNkaGzoKsWOXa60pYEQdnUafKPCm3BT06uq\r\nk+bH2SAs3t2BeS0qKda4fdovippuO1ZwW5Ai+33HKWVTwLKKxmQ6SaiA3GWC\r\nH8p227lV9Vfwog7MotiiHPZOBAX0tmoVUnXLoSaHRuV9WbPmc/DwrIym0wRy\r\nJYHfxIq7SRZF61oKjdXWAfiXp0lIi7IYkRk=\r\n=wboP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.63.6-051da161.0_1662555349766_0.450381109943758"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.0":{"name":"ipfs","version":"0.64.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.0","ipfs-core":"^0.16.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.0","ipfs-client":"^0.9.0","ipfs-core-types":"^0.12.0","ipfs-http-client":"^58.0.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"89aeaf8e25320276391653104981e37a73f29de9","_id":"ipfs@0.64.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.0/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-e3oS+OTpX1Dhqc20TUSPlVwiBVuLOlB7J/Jz20GOWh9UXmRNlBK4NM9CLL/fPGgv76oyUGgev8db2A96z1Q7Eg==","shasum":"5d02418187d1af750a2bfdc62b649b93dec92ed1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.0.tgz","fileCount":19,"unpackedSize":1667869,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDo9m0hyZFEdm0VA/rgVgUsfH5fqivAX0dT3foZrdiq1QIgFzTCQ4O5vvSUVXCxxrOIUyeSTaU0+eOmsk58iDaDilk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGJ7LACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrkuxAAlh345HTYOJ4ads/JmoiAWiEuzfwfHrZLZthdakMUBIGwxP/z\r\nH8L8GF5jmjxTGWkdSAR5QLav+QewZf8A7n+L/CQzuEJb3DgYYAmBl2wugYXb\r\n4MeiUMVG7+HZc4w0t0RVHJI5V+NQ/IYNcDL0uKnZJhHrwH9ffTRY3QFmZkzI\r\nVnYVnlb0oUDJpttAFDn4+joe+U3aijWdvcquv6MLXIQGa7ffuuOtbLeAkB6A\r\nZNs0WnEITPH1fBQiTiGqLttpM+viMXO0eTBZUQiX3PU48Dv4Nb/xcFQZdWr9\r\nVTTji7qps2g8kNcL7NIuJDJxojttmJRlEYn4HPwV8BF9JPzujx+b+o9YigKg\r\npIcnphTHxkwy+eyYlq3ik25ykY2wBnBMELsv+pSAWmPNfCoWWFraj4EFbz+2\r\nSG15uo4WUb7XRLa+j0wN1/FRt6Awlx5CiRZxMA7Uk16HgYWdWyMy6K5Z6Qy1\r\nH9Nc7zgch+z2DL2t6hfE12O3TRicVnZuCvVzZZw5/kNFYe03Uya4RsiTpZDh\r\nagHfc9K/2RDhLzvmEbj6irFtl8bAjPdFbAei3AmubxGJgNc/hwp81KqBIcvz\r\nVc6tXDQbXuk7ec9PFSnMEsd0eOmjiIAoWy/MLIqO9krp9yCk2JAn8KfHbr72\r\n9IgAgLVPG6px9FZP6uNKV+RxPScgib9bmVQ=\r\n=Io8v\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.0_1662557899545_0.0677625577664529"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.1-b5456882.0":{"name":"ipfs","version":"0.64.1-b5456882.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.1-b5456882.0","ipfs-core":"^0.16.1-b5456882.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.1-b5456882.0","ipfs-client":"^0.9.1-b5456882.0","ipfs-core-types":"^0.12.1-b5456882.0","ipfs-http-client":"^58.0.1-b5456882.0","ipfs-interop":"github:ipfs/interop#feat/upgrade-to-esm-libp2p","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.0","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"bc139649f4cd3840696282fa6dc6b241b9ea1833","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.1-b5456882.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.1/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-+PoK32oqiGMOlPvLTJXyNDRIrfpmqYoJRhO74H1SN873FgV1b0ZuHpLEMF7vZRGcKEpqpHLQwpoyMCwfRufXZg==","shasum":"2b7fec9fe0d55e9754cc659ea816c6d58af79b57","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.1-b5456882.0.tgz","fileCount":19,"unpackedSize":1661671,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICjj9N0cJH21X3IcqVnm0GbtSeepi1bbrp7DqnrqogS4AiBjKIQ6cSKCquXC46SWqrE8PnY947Lwf1TIZkfTk2NxVQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjJEDPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqPyA//WOY3JdmXHmYrmH2pYL3ELN7LqJq/RSBskPNokEl7zBRyTArh\r\n5EQT632UPTLjsLyHkpWXFb8ZUnjkhlElIlQRhSa0YOuq9XNdfIIk9MEbyvbp\r\nS8IXxzjT4bFhMwfinr89ykB5D7mFI4TRlQI3Xg57X32VxzzlqLfg3CUhdCPd\r\nYrRZJ1pe837Tr18fk601s6NT1bCXPMcF+8pcUH207XxB3t8A9zcCOc/bzhUN\r\nBltjqbBjgoLbPv769q8caqyvqGfluIuEdS4UgMDGlF1sR+hwT42keZjuH5ux\r\nbpahji9bsLFXiuoOeZ7wrcBiVABdobEUXg3ZVndtglYuN2IsPT+9He36SNdS\r\na4ayJXbihAChMejMLOx0v4G7uvzhqT7Hhs8LczNavYLtRjmm8lbLSF1vbuli\r\nim53gUV9fpuH1omlBN17vldiN/FsBsfEbd2EQKq/4VfV9Q4y0dOuH6OVp/E7\r\nryBMVOBc3W2/Y7Q90LQ5jMOkbEVil0P24+Edq7v3kN/75z64IcQqZ5TOagba\r\nJ3tBGF+jCjn2MiOZIx8ICYu/AIkqqi7neJOY5qF/XjSAk9doV7ogWimpMXmC\r\nPvBX4kdLOyCIxmizWUcDD47/5Lq0zNvp9hohmSghyhOWkZinJcFJgB5WGmVb\r\nskcwbA7619oyF18qmWBq8ryDL8mshcCED2s=\r\n=vkP1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.1-b5456882.0_1663320270816_0.09886970782735416"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.1-7c676f63.0":{"name":"ipfs","version":"0.64.1-7c676f63.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.1-7c676f63.0","ipfs-core":"^0.16.1-7c676f63.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.1-7c676f63.0","ipfs-client":"^0.9.1-7c676f63.0","ipfs-core-types":"^0.12.1-7c676f63.0","ipfs-http-client":"^58.0.1-7c676f63.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats-multiaddr","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"90802df6c68ef286b155c31dc4f625a9f29ec7a7","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.1-7c676f63.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-84qgA5z3+JW+n4wTM+1EnETupj8nSvmsXrbsahoPD60sG36S1DTXHYZWIjw+DgprAcNX1+XUtp71VCBumEvjdw==","shasum":"5d2f85a8baa59bfa36847bc72919a4731d91443e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.1-7c676f63.0.tgz","fileCount":19,"unpackedSize":1653298,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKOtaNbr2PGRpq17ZJxfYNVi5AHUSEwzi2RS+mbdBGcwIhAJx0KSF3cajOKYaQklr5Yu8ts0ZrRcPjUmudfsliYdzr"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjK2MYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrlVA/6Ag3KbCHHpS/MHCP5XCy9jLuVK/nGxop+TouoLBHya8HephIV\r\niU46JKT34O0qPI3yPAUltt3zzaJvWYQKRQGuq+1ZeMADbyJT7yG/bXn/SOW2\r\n1aVSGAxA/W7sGiqScKztzdRbM7rlFQ2MMjlUIeHEMam6BtUeNkD74Opc769x\r\nI5zm9oUU29kCBPZpagZvsdgY1Nf7XW3jI2s5q6rjAjnDtx09t0unSfmjLbi/\r\nygReBM0ke4Wp7uuFF0pPCtIfMZ6+WxWw76UqDZHMHBDhDAZtsyVU29lZISVc\r\nfdjmYmWF77cY2QNfLyKctlRkB0gHe42ZIy6RiQsVBfGLkED9hDLAUszzjfE3\r\njepiulp8DF8tNwzlLmejojsuLGtlFjHx+5iym9Ms2HmcJkrEMKf9dNPGEYqH\r\nIrTpCOxPBJlsJAV8GrahMr0O7QagZ+Y+eAtHA4MZckwYZX5LNM0rW9NIeIQ6\r\nj8H25BXUEijjzmXCv97LDm8CNtHl1ETnKwBEMBPp1VI2ML9uiBymy7PcFLPX\r\nPpMiqn9DgvyMybvL1Is7UWRLKbcPxaYZVj4iRtTRXD6bxaK0p2gXQ3SX7ZsF\r\nyVEvmR1gleft3WTKvnxsSqh0fz1JraKzYzy1g6dxPlkl6xTrWs9YbDFDT83Z\r\nOpUvxd8I9EXWsuCjVYkXkhqU7lH1Toyq29A=\r\n=BXFW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.1-7c676f63.0_1663787800727_0.7420874653617784"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.1":{"name":"ipfs","version":"0.64.1","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.1","ipfs-core":"^0.16.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.0","ipfs-client":"^0.9.0","ipfs-core-types":"^0.12.0","ipfs-http-client":"^58.0.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats-multiaddr","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"b20873337af9237e7040b6ede8555c868ba773b1","_id":"ipfs@0.64.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-FB1JRhwtwwIY9qwKUic9AEbMvFrK/rBE5Fi2oke2k78ahYuEBleJfnVvGPC1DWiOaycHhSZuRzJXBJTevDfM4Q==","shasum":"7110356128f43b893c51e6dc7b36d2a4afc9145b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.1.tgz","fileCount":19,"unpackedSize":1653210,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH1264/O2t29n4ZtNoYeVYhegrlS7HsSeTq2YEEtOOk4AiAKSsCDuuer4F80aZbeTUPsrftcIijcrltaA6T9guIVOA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjK2wOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpTyQ//XvhbietkbLZ2M273TktvRG9hp1tBPTjfwELtk4nolt8Sx9kG\r\niFvpi1uxZvGirg49GUIeMGqzqO6v9k2lnn4Pu66KYvSQt+uRYsXaHJugGwVj\r\nKfvvSsvMTEkP0DkecaL7xqKSl6PVaDIQcSN3N+hctxveobiqO3/NUkqYisF4\r\noMcyUuSvsjLrFyMaqGwDgx+oI4e+GMXYp+kTgl6nYH+lz3zsctXcF+T6G46o\r\nI5iPufJOvhW/EKKGPFh/dy2AUFvd9nZiFfzA6FRWtooLaUehZ6hNcuTfZC2c\r\nSy3YzGmW3OR4aiOasRzJxZrUbeS+604Rx3AZ+Bcph8wh5/cm1nKrrTx9D9b+\r\nR78ub/ynPXqRcr5CfVF91dqXJnvL76qv/C93IVgKLHvpwEQaADcqid/Z3IhO\r\nquE0DuK0M9KkYh2dKqgfjU/+dH2STq6ufbPSeAVbBaLqkLyLltGvU4UKSCZh\r\n4UHSH8uMSgKpmH6VJ3u8fojyUbvyNEvxwfmPtDHTcVrbjevO1aZA+0ZdPPhQ\r\n/SA/mrZalSL3MQw4SdI+46WmQaw8YvtXfeIEdyLJDuMoxzXYY0jE1W2BnaKb\r\nQbm7Qa7NdBrS43HCujq+0Ylsn5bb5eTiYrXreEx5bBxpNlZ0gf0LxrjuUelB\r\nbyf/zr4pk52fUPeBkza1mU+Mh1f7Df2N91g=\r\n=tAW9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.1_1663790094088_0.6730892988812252"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.2-2a830bf5.0":{"name":"ipfs","version":"0.64.2-2a830bf5.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.2-2a830bf5.0","ipfs-core":"^0.16.1-2a830bf5.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.1-2a830bf5.0","ipfs-client":"^0.9.1-2a830bf5.0","ipfs-core-types":"^0.12.1-2a830bf5.0","ipfs-http-client":"^58.0.1-2a830bf5.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats-multiaddr","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"ec3e046a48458e999e557f7adea92e304bd7b0e8","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.2-2a830bf5.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-VA24Qs/LeMfxfV1XGukbLsBWqc1SKiYesI+YBzd45kOrQx1lEyZqcC/RtnpMrgmdJtm6BSDixS1Z9aHWo5Alpw==","shasum":"84bad42702d1f873dd6524e56cc20bc35b0c8807","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.2-2a830bf5.0.tgz","fileCount":19,"unpackedSize":1653298,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDq42/+ZiEHdowzPjrN6T6XN977BBNOqjCZdwVK8v2pVAiEAyMPY0rA+aF784M090OVcUM3DShwvyOyNUfSQ800TzLo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjK3n5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmosLg//TybcszCan6wcvAkLJWmf4Hp5msqR07E0+LW0+nKiI9jz9mbZ\r\nwp4zb4HTGFpYSlJrXzc1tPWqA3HKtojQW/zuno46Ve8IjFKQnt0AKSIu/+pi\r\n+ZmbpjYHYstoY0jYh/lzVKpTDuxub2qwDwvw0F726LXwBLiAzkz73mh/4NV1\r\nOMDZN+DEGB2kgVLm5bGCGKcTHPkFzDzdw8nh8XuBqo6d28ZgVdCS9tUDMIpy\r\nq7b1Tt0E0tLXk6lTtM+P24CpqoIAofFfMXVRwgM2LJz21y6pW+tsP1JM5907\r\navfom/rUdKSVJDq0FdORg1f7acUhkZ/hyCZ3Zha48fv78/+nHXXw2pr0jJg0\r\nP6cGzzcU2Pvxge4RmVrprjl6Nd6B4sgvn6nlhGeFfW7YVjyhSTyTs0a4h5a5\r\nZIsEqj+lzoKReah+I2L1kWlDoBPoQ940Cj/S4L+KNQP22f7BepqUG0Mo3iVD\r\ng+xGHP0bLYvKrxWPCoKOwzvluXv14hNeuWn3t7IprMPiLo2u78QET3i+hwXI\r\n/RLeZAzWmypsOtej7il8iV6fdZviU58dcd/FSEBEJobVJLW7cRQyZYwh0ecn\r\nDhEsYqsga8Haiwdc8whK2WSPb9A4jzgoj789bA63bqL93wKcAkN80qKTltJx\r\nadn8+IKbGLAFbY+LYBKK3MGcWZgYc06AsSU=\r\n=t/cq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.2-2a830bf5.0_1663793656951_0.09028392454400991"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.2-7304a0f4.0":{"name":"ipfs","version":"0.64.2-7304a0f4.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.2-7304a0f4.0","ipfs-core":"^0.16.1-7304a0f4.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.1-7304a0f4.0","ipfs-client":"^0.9.1-7304a0f4.0","ipfs-core-types":"^0.12.1-7304a0f4.0","ipfs-http-client":"^58.0.1-7304a0f4.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats-multiaddr","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"95735ef611dd7b897d3d939e512b6229757532f3","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.2-7304a0f4.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-ngHMh2jP/lIbWgH5eIdUuLKQLafKhTxnEW8vNrQ18pMSvNwirEqu4Xkd9gpmaxxv6iSoCNVuZ3uDf4pnjIwTXQ==","shasum":"8172635598d4c445b31a39dee7a99793d777f814","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.2-7304a0f4.0.tgz","fileCount":19,"unpackedSize":1653298,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXJbEAp6r1ehjbKbtXIMwxvjs4DMEWtOKCXi1iU4IIDQIhAPRRp1X+uzcVVcBjELKmFF2xsyAm3DObdtpz44peK/pH"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjK3ojACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqMMw//egCWLl7DsVyG9WMjDIPmOG3rl91iH95gU1V08KkZjpWKQ+hV\r\n3Zd0399Jvfh9azlL57dPp7RwdS3cKs3spsx8FraOSn0lU8m4p5qilImVBybs\r\nvo6zxXJ3Z50LZFFM06n1DRsoYMGwndtflIRZ9Aox759B3kpDC/Vl11m/fgrz\r\nwJatoxTQ2786++LLmsU+vxux1S2n8LEc+K80R/AJbkegijvqO4sA65AtF9SZ\r\n3jN1dmbzRkoCMoSzcO4eXtpY5r3iqMt4m0LQEvV9RlILfqi/SWmEAsBNnLsS\r\n4L4mBaDjfCBAl17LwEr4i/9bqkooirjH2Ub1mdKDh+oEKqTEZx0UddWnKJ27\r\nYoofnBXRctYmoxRbnAV7Yq25Rk0xMJfm+xoImT9Pni+JojGRVtVLX9au2bwg\r\nIIjAHjnNEhSnz1LJCeF8ESg98w+WAEwNGgHCQ6s8v8dNl1fPT8FUCh+io65q\r\nhtS12lwhrghBGNLqO5944zNrLE2s812bTkQuKgJlLhfI1hutz676HrSOOiHV\r\nPzPZF7qiTsmW4mCH1tdTkR7vD7qECavtBurlsOKBTmwHaZGFnmhe8FTgUd/T\r\nBuWaOWYN1I8E0bTYdsUz2JZO4vSmQNO8gS0NnLORVa4NFlScvrzriBEltGl3\r\nUHOyG7bKk7rf74uW3LRJQO9V3kPIDLcnzZs=\r\n=1ha6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.2-7304a0f4.0_1663793698741_0.7919326382447283"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.2":{"name":"ipfs","version":"0.64.2","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.2","ipfs-core":"^0.16.1","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.1","ipfs-client":"^0.9.1","ipfs-core-types":"^0.12.1","ipfs-http-client":"^58.0.1","ipfs-interop":"github:ipfs/interop#deps/update-multiformats-multiaddr","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"d1f1e75b2060c5c2e64d133a7a6bbabd2641e5ef","_id":"ipfs@0.64.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-k6iUBn4aEbrBM8+OcoadQ1YR40on/eyeLyyIhyWxf7rXlXqNFxzLDyI1vUJp4CXbvM9Vq22FLyxGioHgZ2aY2A==","shasum":"60fb75a03ef43af1a1bdc390d34637a67739db62","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.2.tgz","fileCount":19,"unpackedSize":1653210,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5TK0AK3sLknKWHP3mUb2fy0xKL4qZGIDoHvvbSIdHUAIgVR9xMecHM3bf8BtbnkObePr5kXyHEifu47UQTcbZPTA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjK4g+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmruEw/+MdM4XVJOeQ429zgzJGpyC0lVW/8htaO27eIbBb1zp/QooNDO\r\nteuAAuZ+OewqLEZ2e+3gt2OP9T26JGDY4GEMgMVPNgXjfrCt4r1Shjr7HiX7\r\nhX8EZlAAeTPtzZV+qO4RmNMk3Ss4g4RyCBW4mlrZ66790JMnyp133o9VlAQJ\r\nDgMslSGcOHecwPp+qWDTQPBS+nLXcYJHYn4mWgikwKcZ2b4zR1MGO+DFeKyd\r\nyRtsNvTTgYu6zSjAcvqynz1cqqSUSROIB9wtfF4F3vZhKeLWOrZhRyQVMJD/\r\n47I973WpMgpkdiJvKDuIlKxgmJXgw240ipZx5tUn94b+pXzGJjTlpOc+IvNN\r\nNd79MVkNC+i/+qXE3eVuls4MqU1G2gny8q36GlrXYPXf3D6judi/YGSn3VHQ\r\npXCTx8EWnS/dRs1K06ITQYuFCpVO7fWh0lDj2FQTX4OYcqLaDBqf04GWDU+V\r\nHNco6pb89idZUid7zDr0IPv8QW5kNe2Vi5S04wiAowXy8A6FVjWl1gG4cp7t\r\nnqJb1f1neFiQ3Q+EHt7If3XJfDFK48hJ5P8zNjC1kQh8lHJPzzgQSV1ZrWCv\r\nEhWvuZfnQ10amRr9Vykm4rS3jRMaEFIMkbj1ZPPLctEogVSPUZK9icNLO4NU\r\nw8kimeJRYdbGI99Mb4HrcFu7sS51vgnCMfU=\r\n=2b2v\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.2_1663797310555_0.7148238252348718"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.3-d75e0a39.0":{"name":"ipfs","version":"0.64.3-d75e0a39.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.3-d75e0a39.0","ipfs-core":"^0.16.2-d75e0a39.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.2-d75e0a39.0","ipfs-client":"^0.9.2-d75e0a39.0","ipfs-core-types":"^0.12.2-d75e0a39.0","ipfs-http-client":"^58.0.2-d75e0a39.0","ipfs-interop":"^9.0.1","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"4233393ebc1f8526290235c1b52f4d459ff96e1b","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.3-d75e0a39.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-fC7Y7oSPZ/4VmwfjlESibVGz8R5mWWWZytOht6prNm4F9t3CsaeHyuZPKeUlqqDqjUxKtdIPCyOftPuQP9sevw==","shasum":"72e34ca055318a31f60fb8be2f1703be118803a1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.3-d75e0a39.0.tgz","fileCount":19,"unpackedSize":1653257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrnu/SVHCU5nyiZTQjFuQz8fy7I31rWIIVNsKgb9Kk0QIhAPh9BAM2AA1WOmi1/cl35utk6/mRnLAAboIMCu2kk0xQ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLCJJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAdg/+N0gS01SEzX8D0NeP0RHr/1pFakhDnDGYIyUSS0xNyk6bL05E\r\n6PDE75EPhSscFzh2W1TmkwflwJH5hu458PeWlpxVybVjln+fmzz0X6pvmvi9\r\nbvqWAJJ2uKBuXYdEEEEzHG1Z6X69NBwVJoGXVuLgiFPO1b1nbC4V2Q3NQGrw\r\n5OpRRvBcwXVlW+xGWtHXJ+ZI75AovriqgguGhxqqm1FuMS70F7YicXhPOo8i\r\nNdEPBMZuIJk8guwnqvF/UK52NxFuMg1w/QzOppGtcw+YDoqRQgy5fMfELjTo\r\nl/T2UOxvITyTI/MMU60iUPMnqQzQJwhWvctm6uLrsuDjfkokOhhzfqUJHZxP\r\nLirvhxWrH3ZiDgjQofPo8TfXq9kbLnPv6+zZjMRvkO4EwQ02Fe59KANpSRjh\r\nt7EzAsSDS73ph078+tnSRtUVtICjgjROAQTRR15NYvKWXU+ZQM8vD3U9hZ21\r\nBWdpL9yjV2GzgVQeffcBAKwvNV+iIGr1aHuI5/loP9PDbxEdbSHwIKbYvcqd\r\n7xhOV1rdQdb6Nu1Iy7P5KCLakdas1vbRnSd20XOCg8OBriihG2tIZrK0hNLP\r\nUhqhkAkUgnJ2JOL3MLdfqt1VJCpOM+jiT7fTCGqWNRL+Iazj7/TJraabgRIb\r\nOSZWXlJoEkPsOIc8w2ExhyKFX0w/eMAbkbE=\r\n=RPOg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.3-d75e0a39.0_1663836745137_0.2348527431518379"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.3-d1b0a8a7.0":{"name":"ipfs","version":"0.64.3-d1b0a8a7.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.3-d1b0a8a7.0","ipfs-core":"^0.16.2-d1b0a8a7.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.2-d1b0a8a7.0","ipfs-client":"^0.9.2-d1b0a8a7.0","ipfs-core-types":"^0.12.2-d1b0a8a7.0","ipfs-http-client":"^58.0.2-d1b0a8a7.0","ipfs-interop":"^9.0.1","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"de2a2b2cb3fb26e858af2319c63296a1ca411c25","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.3-d1b0a8a7.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-2ZQFtV9RblxGI72hb2Y/vYCbnqWfS1J/dJsk0ivKbg0DUYtK5CsfNrqIm2pFHdGu/6zWYLM69Wr6Ybvd2mRyuQ==","shasum":"c98bae9fd7d04369dbbd0638e8ff693e8e45c60d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.3-d1b0a8a7.0.tgz","fileCount":19,"unpackedSize":1653281,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAzUk9Na14E2+L3YQcmIPuYkBTzd0D/K66oOGxI78xSsAiEA9a0WmhTms+bLQFuiyccsZ6Et/07p3eLEWjZBpFy+mnI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLDwDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQHw/+M1yzkDFpp9wKRh7dtJwhS3e/gJ8l12RyyZfNlWtryv9kF9g+\r\nOdO7FadpAS2fg4NvM1xYqtwWl/Xi86s5R1w3ZoQoPOtRfgn1V3+VnijxfSzs\r\nh3wurwX6Bv2z+R31B2dG0PQIFnmQDBK9X0Iz5ErWRDWv6fmi+EqyjizsZPXq\r\nUOoHnJ2Tvnyw0Ltkl1Gd2Q6WyAgv/7FeV3DsXcD/+L+VZJJNmdbGjDFFDvJ/\r\n++ofCr0RLdXcC0zmI2TjIuMqOWGxrUlQmao/I6VDmg17nIyr/0/LDaXIc3+g\r\niF9mcsBi/trsAXAw7I2h4xLDlskUgH3pXt0sqpXRBY+lhCJsBFz8P5A4oRku\r\nAujwMXxKA2SPOIL0L8+BzR7QdCV67C55VVfqifvIEyMrCKs0ZFxCSm8L1yQe\r\ngUSHoJozy/ZpVV1a4igggpvEtNEeQ2ORbJR67qhcySiLhn30WJ9XSz5RJ0P6\r\n/UoZr+AdheNEHN9z+ccfLClBEL6+j/5Q4dqJMZ4CPBIpVg5TfDXX5PiFRV58\r\nmNnB4vXsaA+dxGakI8NmZHoIAMGJcefwutRBvHlmO9Vtu6jeiUBiqqC2Z5C6\r\n9WBfwpRkTBpALoQe+y7tU3AeG9pLv2afuGh77lBRm1bHXg4c+zyZ/chxCkX5\r\nH7fRqXXxXcHBbsJsI3rnbDChHCU1GiGdwYo=\r\n=IO8Z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.3-d1b0a8a7.0_1663843331031_0.8415332700671363"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.3-acbc1c62.0":{"name":"ipfs","version":"0.64.3-acbc1c62.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.3-acbc1c62.0","ipfs-core":"^0.16.2-acbc1c62.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.2-acbc1c62.0","ipfs-client":"^0.9.2-acbc1c62.0","ipfs-core-types":"^0.12.2-acbc1c62.0","ipfs-http-client":"^58.0.2-acbc1c62.0","ipfs-interop":"^9.0.1","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"60666473159284a7bf9067d10436033caafeef5c","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.3-acbc1c62.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-YhSXSLRvSbtIFunIZ2Ye+ru20P6+1dGt9OVL2PZPs8YkUC1YkXwAFD5lmnovem/6r9SAza+jp0BSi4gXjGseQw==","shasum":"6a1aa77216e3c4ab061becc9541a49d66f601fe8","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.3-acbc1c62.0.tgz","fileCount":19,"unpackedSize":1653281,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICswSocnTndtWN++HOOzRl3pfo/PJ7VdjS61XhxOCKPhAiAwh0xN6/zq2aWtQeqCG0iaas8lECP4UZfDy4aFDVhX3Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLFxXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoELw//Xm50RZQuuxXPHxbbs71MyCCmy5sENCJ2n4a03W7q+qc0azH8\r\nwoKDgcqOh7NMoJ8LM0jYk1gGkRTL4yeNgE69RL9nV8GpLJ9f3pGFF5Ka7pmK\r\numZBDRiYHOCgnOypPZhR3Dd5hh3PllhPvE1IpMp1NRivaOe2uySX8W7tE1Eb\r\nbLpOMotf/lX4rUdDjQ7eyNI4xHA6FXnZXKExu49ovl6hf+a1KBWgKmS87vMF\r\nxj5OiLOAYfnkgRc5VnVLAuwlWdpFctEPd+mgzKTdBW/lJlmMvxnNCmupAtrx\r\n8QvNExA8R3hJTWjvf4mBXuMYQNUbAfKD0ygVktYbecw6yv78oWIVCBaB1osq\r\nt4KMtCaCoYXcRyKY4cVuef3/P1niGJk7r6virjlq6BMiILP2+a94EVbt5CAk\r\nbu4p7gyBgt22vMoy8a6GWatLHoqF0N6ur2QJk649HPS4ra+EwJ3b0mx6Ry17\r\nYD9NP/v7lWqEgiR5XAV2ALDxGNcvaPVcOcZRGFtj7cpa0GC0hKBp/IvaS/Dn\r\nwkgHh6LOSxLO2TY09NJfmM8P4sFU4AiA54zchzzsy9kwT6T7+Mur8gHhu1CH\r\nY2iL4DUramSp+16OZN3qEopvWX7equvrX9gjb9op6U2DY/2QEBID5POpAkiH\r\nmLgdd3LsMf7pXGyiUMDKHEA7r7P4q9hsOWE=\r\n=mHf+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.3-acbc1c62.0_1663851606983_0.004831884790458263"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.3-dfc43d4e.0":{"name":"ipfs","version":"0.64.3-dfc43d4e.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.3-dfc43d4e.0","ipfs-core":"^0.16.2-dfc43d4e.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^3.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.1","interface-ipfs-core":"^0.156.2-dfc43d4e.0","ipfs-client":"^0.9.2-dfc43d4e.0","ipfs-core-types":"^0.12.2-dfc43d4e.0","ipfs-http-client":"^58.0.2-dfc43d4e.0","ipfs-interop":"^9.0.1","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"4eac92ae987d3ba6007c4742456913c865a06857","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.3-dfc43d4e.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/5.5.2/node@v16.17.0+x64 (linux)","dist":{"integrity":"sha512-B5jq237owxxcRpYPvckRkgHolIdM5bfEGU/MqZAk0ZBG0hrwyBnYaXDUfDmGty14VW+1RygLBd8Ldc8/imGO9Q==","shasum":"355c96db7694b0cd71315c3d43f1b5518156d106","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.3-dfc43d4e.0.tgz","fileCount":19,"unpackedSize":1653067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs+oVFh+6xAj4zh7+IgI5AhXTSTaOlU4bVRtjYM3WUCwIgCpTNjuovbP2aqdHkp/E0Kob60WsPOguyDM7HXMkMr9k="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMbU1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrjFQ//XEMiSnkQit0Ljh2Jp+z2xLWSFGGnB5d29S9DLdDLgWktT1mh\r\niZEGKPJ8lM5jLbmrHYKAoMkvNRZalsBPL7nT+c9MSlONctqZ2GYT7CLhGzga\r\noNl+kbknymuhgdoWDNduxUGCP6fPIv1LfdvreoYy7ufye/0REUl4KFdg4YLJ\r\nGkloNKeVS/aUKT1ZrVUepni256T3QIBUclRV7V27kS+Q3mJWH7QiRN87+C/i\r\nVcTMgvd2LmtHpl4epda2qQgaUT+CPsm8n28U57YwOFdoqGFr7h2N5wZvUuYf\r\nTLp9DbWQnFfpev49cnwwWrpMSXC+7WnkgScMTIpzKHBVd7mf7/LlxszrV/5r\r\nDLUtO1ubHStlGWqayyo3I9hWZrD2Ab0B/9KoYtpW60Z7UCnPv1l4/6HrI24e\r\ne9Jh2sRCfz5kR6QnfyeJGS1nVLATuz8Gj75DbzD6DKrOPX7wy+r+BKsOsCwF\r\nCACPxcpbW2BtBIoXuqrPt1xzXgLQr4sAE4P7pFh9B3wtqBlcRY9r5YmLYuHg\r\n1T8D06Zf40c2vYc7KDmakTBgXvnFFKtFLbmu6x/Jcj8socbW3Rf533n53qBv\r\n4jv595rANJ11MKROvN8lwtyEyep31ZeA3cjvJglWFnn7l28bglah8ilpwOqe\r\ncc41JxwflcIB7I4MYiq6CUyxZYzEs6uy5dg=\r\n=EEon\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.3-dfc43d4e.0_1664202036939_0.8553603365157263"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.64.3-0cee4a4c.0":{"name":"ipfs","version":"0.64.3-0cee4a4c.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.14.3-0cee4a4c.0","ipfs-core":"^0.16.2-0cee4a4c.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.156.2-0cee4a4c.0","ipfs-client":"^0.9.2-0cee4a4c.0","ipfs-core-types":"^0.12.2-0cee4a4c.0","ipfs-http-client":"^58.0.2-0cee4a4c.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^1.0.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"b44ea59fdb45d3e8532d6a2d5f670e2df46d36ef","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.64.3-0cee4a4c.0","_nodeVersion":"16.17.1","_npmVersion":"lerna/6.0.1/node@v16.17.1+x64 (linux)","dist":{"integrity":"sha512-tSch8o+t31rpSiHc0gas9yxhQJU2vPS9wW5nbaipq3FkS3qI8U3Kao3GTUQ7eeFbVqDRWlfdKJtypPuoAmX7zA==","shasum":"615cc46d6edae6e7fec876b7cc62cab80408c26d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.64.3-0cee4a4c.0.tgz","fileCount":19,"unpackedSize":1634057,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwnLTt9Yr5Vi3RKOpBa5ZgaI/Ap4m5sQlt4LU/22Zn6AiEA6j3qDu9roPM8gWa46heG9WLV/6PKj5ctAwD0msjsJrc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjVldHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo6MA//f2uIhNztwHBST4XlQvEJUi8HD04lqksYeV7aScRAVuSV/eP3\r\nvvdEp/xzYWOAXJbnJ9hpeqEAllio+qxZxbBJT4i3AnKDQReMcF/otXWSbyOn\r\nq0L0wiB7HyUmGDS0pC5n/v3XYWzhoodhUQAiTdwKlu8mqHkgHFFOd4YuE2tw\r\nSX6TFqfyeXGqcQFraaX/fUwo7PYYrSOl7Co7GdiECN7BkMvoqfiKSY22Uzdl\r\nfh69hidxEiffOnkQdh2VUCv2Lj1XIWM0BPnFVZHz+4I1PJC12Aby6rVFSgXS\r\nqhvAnrhH8KxAQe2GCCQAaX27A4MO6oxgID51n6s7/JmiWRi88hu9eT2bp1ZQ\r\nWxxf8GoMM/Utc6tmTre+/U5oePfQlw/yiBb4X8UlecApRF7NBCeaQT2Tle8I\r\niNCmoW19ZW7NvjoFVlGQqnphuuAeO/4NKhj0ewmd1swYtcevVDaA+PLgHwyv\r\nAlwv6cbVFiao7joDaS2ZYN/Q3k2OClJfcupg0jG+dmTfYhOWw0tEuWsHb0kf\r\n4oOKsNgBQih7fyCLUgdmj9CR19Hc0X4LPouz6FmnYAN7HVKmvw6LyO//nNyA\r\nrFxxQfUSOcOci84Gw4mcGGt16BqUCAce7sGggLqJc4YwIcg3ObXRTKcL/KH5\r\nNjsd5dmxs6pFlJQuEVV1+PBZHPFxyy7ds2Q=\r\n=7gGT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.64.3-0cee4a4c.0_1666602823559_0.025203632951565025"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.0":{"name":"ipfs","version":"0.65.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.15.0","ipfs-core":"^0.17.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.157.0","ipfs-client":"^0.9.2","ipfs-core-types":"^0.13.0","ipfs-http-client":"^59.0.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^1.0.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"e8b7b66bfa98c2a1c0d0bfc19f698d7d00b6c888","_id":"ipfs@0.65.0","_nodeVersion":"16.17.1","_npmVersion":"lerna/6.0.1/node@v16.17.1+x64 (linux)","dist":{"integrity":"sha512-VAee8AjNzx6HY5E/IltAu3hyylSqgpCxWp3ID09k3jUweBfzDHDo3k57W+NyZwfPh2fPneUBEzfycOv7x7dycA==","shasum":"18e6c014b27ae6dc6705052a3649ba6b72bfeb8d","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.0.tgz","fileCount":19,"unpackedSize":1633969,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBHE2Bc2W+U6p4cvuuEqinfXBLhaPVbyWTHCSXP6fVrwIga0sShqA+og1/eeiMtaoaRZR9Mw06ClkC/Vm12Kyctbg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjVm1OACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6fxAAi2JdIXRuv/I9+XqkJHo9SIevOcGE46G2gHm6e1JAMqsGZSaY\r\nJlqlnm0V4u4jcTm1deZuYGsKfrM6I6465wT9IZXqiXlAkaevxYiFWfvG3kqV\r\nBudmtZF+zkPZAeE5/ea7zCF4uPz8Civym2rgvTBq07SZmqMGsq/5oGVGo9L5\r\nX/60Bq2cI8M7HPE5guYjKHRq92tsoJg2XkF0dj5htd5wB7N6JW81xJEO6n1y\r\nMSUN+1AU0NJDGUqP+nj/d/hf5nfrfelkT5fhvD7LnYS3Exz5mOHe3oQcmnr4\r\n0vj5d9IfqzUeN2TuLlW8db/bPAP9SaO9tV19K+qyTdmpfubLZ0rSny9S/J5t\r\ngYmKvDZZA0hxr8M4OzRAJn9CwR8KsV69YcVOmUIbzZ0AbyG4LgmAaiTjwz+I\r\ngUlYOsYFUgigAV3795YdiDu58HJ54KGLiElL5ENc+f6v5t2AupZqquh+79W/\r\nXjfPAcHAc6TexdXnuD7wk2GlDtvWG5ezOZL2CeDJ3CFEebUtZJNGLXogckYk\r\nxgzcuFqGOF300t53h2K9bUqlofbOJ7mVZ96JwU1oQrI1skXa51hb2Nl1CRKe\r\nUb1AD4nzaLNgjRdPVqog1JtN13CR9eCI/QtHayRwecUAQvdHGf5EK0oOh3vD\r\nPStswBuCq8L57X7DgCFnh7iTFEjPuaUVt88=\r\n=Pi3L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.0_1666608461841_0.3917678055491074"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.1-a77e40cc.0":{"name":"ipfs","version":"0.65.1-a77e40cc.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.15.1-a77e40cc.0","ipfs-core":"^0.17.1-a77e40cc.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.157.1-a77e40cc.0","ipfs-client":"^0.9.3-a77e40cc.0","ipfs-core-types":"^0.13.1-a77e40cc.0","ipfs-http-client":"^59.0.1-a77e40cc.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^1.0.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"a614528c55b8b22866bbdd2ffcde2e38eb5f578f","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.65.1-a77e40cc.0","_nodeVersion":"16.17.1","_npmVersion":"lerna/6.0.1/node@v16.17.1+x64 (linux)","dist":{"integrity":"sha512-N+e6RJlBwOS1N6/pOpxSJ5tK/RSHmOw2HhQWc6UwMtwQxMF8rLLWm65NCIq3eyJH0bf282SYnVsZRjY54oIayA==","shasum":"c935d679b03d0d6f5ba254980c8ba9ff6d4a101f","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.1-a77e40cc.0.tgz","fileCount":19,"unpackedSize":1634057,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjOgqn5kwQ5T0wUlz5TnRklPvRbo42ofXa8V3Vhnzq+QIhAJ0TkSIiRf6/kZ7fWdBJIeY220xDe9Z/DLKhhoWaFP/D"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjV4wtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqm3g//Tjpgr3B5cBymmZfLq+Uwwk6MWjBGrZFnW7TLIx8caPsZVFaW\r\nfiBQTofOcoaCt9IZFPC1kyohaciRJjMP364jfkmQUPJ86AvOdm6ZHoq5e+fC\r\ng75qrjs+t18bSIJGm/zengfNCSq6IcwtO9tluMuz4bdvgaclb+cYu07PyAfd\r\nEUWYOq9Xe5LYKwcNnmfRYcXeL39L082NksbeTmcosMle3FMWmx8j5NwS/osh\r\nsYorQKaU6O7O6c/XzRVh1pqiUvWVEjJi9kfOXI6F0Mvv999ymBjKiqRyK6Xh\r\ncJhp1wCiRZyacFx7F+Bg4hQoSJYla5//40Cxo2VRXHAkbL+Rc+mLe31zIXVz\r\ntu3gNefjFQDVy4/qb1ZK4jzaDjtGg/eHhRvgP10DyQvPgeBom2v2oCh2PP9k\r\n73wXikr/6CJfkWhW6Oo/oIeKOtvXsbTpxARRbyoRM01LNgDglUuFynbgECyM\r\njJCwzRJdaurlyNkPA6jUeLj7QmcQCpdqnbSRcf64xkr9huQlp8zxcGIjm+b2\r\n3lkJrgCtodi17WfT9S7z7eShhyW3ai/MisB0+LsgDlcxDUkyIuA27M4gajuk\r\nxbF/ma2TNFYhUl92WA/UL4Zv5UW1aAZbnrP3/dUhXwh1Mu+tk9wvKBK1/Exh\r\nhVriLjqUjAN+aJJsiPGuw3wYiwK6GcKdE2Q=\r\n=vLk7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.1-a77e40cc.0_1666681901668_0.5187673142133893"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.1-58e6f468.0":{"name":"ipfs","version":"0.65.1-58e6f468.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.15.1-58e6f468.0","ipfs-core":"^0.17.1-58e6f468.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.157.1-58e6f468.0","ipfs-client":"^0.9.3-58e6f468.0","ipfs-core-types":"^0.13.1-58e6f468.0","ipfs-http-client":"^59.0.1-58e6f468.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^1.0.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"2a13d94cabf2e6ca2f631dc9686f03de6aa42447","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.65.1-58e6f468.0","_nodeVersion":"16.17.1","_npmVersion":"lerna/6.0.1/node@v16.17.1+x64 (linux)","dist":{"integrity":"sha512-u6nADgC4B7agq549R3UfnWbB9rqZs7UcevMeBisGzNFl5HLeTMj7TCBGKbx+iAypx8CZmuCInBCfi+95AV2Uxw==","shasum":"c9c17082b61461a8aabacd43e04fa80dda3634f3","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.1-58e6f468.0.tgz","fileCount":19,"unpackedSize":1634057,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAWcMHHuzrZhSjeurOXXgTbLYLYU2N6q12mqVckpsQOAIhAPi+UFepua8RvOayKxuDfNUDw7W/9EfobUlCWGFQ2Gpd"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjV5s8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmodoA//XUA847t5bMZxpsXJpXttz3bIhrifO+uR9g3/cVyHVOT0fuEI\r\nfjfeWx9AdxZiFNCCmfTitC9Wiv33JiPMZjjAD5+n0EcEpYSxPVvktuRQrbcN\r\nFPF2Pxxaiwd50FMPvFtPbXWRLZheR2C0cbCXAmAKgqLg/u6AVAmlmq0psjc7\r\nl2FRffRxvrI3rxApWa6yEBWVT0T1qZzM37mXUFndur5d+qJZ8489/Vgf2/Pp\r\n6YVRbsyxVZovnoNp2OrXbtUSUxuZMxwsxIZV4Z05bWotjEcX4LclZ31gxEAY\r\nueRZ+BliM1qcaQUx3ge/0FzCuZVHhjCT58zv52D/H7LKoLTZw76wHXV7Ptug\r\nw7P97KfZEnTYicT3Rf6GxhZr5rWlg0fjQ+zXq2UpPsIKv/WOlrHwGft0FP+o\r\neyNFupXHc/kYo/ZYkPdLnzentcezC/HQ4O1KbuDq9/iLXpWZzc5LaNYWY6Ce\r\npOaHmGgDe8QWWLoqtmXaGppjJPsdPnoGytECm5vuOmTYN3oTwDN/5/Md1IFT\r\nSJdnKV6HvfEwh9OQntDSX1Au7Ah7cwWUPMam2qac0jExD3pDUHZafhXDRNHh\r\nvKkaLSRR8359Fscvr3dqPakFxsFtz0OJvsKrz9QUDGDpjC1Pqef3MWbqyiAl\r\neK7qIDvuWVk6D1+hBxbSpMZsV1sDTTkshDQ=\r\n=ytqq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.1-58e6f468.0_1666685756492_0.4683439679504042"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.1-6ae5eb7d.0":{"name":"ipfs","version":"0.65.1-6ae5eb7d.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.15.1-6ae5eb7d.0","ipfs-core":"^0.17.1-6ae5eb7d.0","semver":"^7.3.2","update-notifier":"^6.0.0"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","electron-webrtc":"^0.3.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.157.1-6ae5eb7d.0","ipfs-client":"^0.9.3-6ae5eb7d.0","ipfs-core-types":"^0.13.1-6ae5eb7d.0","ipfs-http-client":"^59.0.1-6ae5eb7d.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^1.0.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"848f64d53ffe001cdf63310c06e8f0ffe485278f","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.65.1-6ae5eb7d.0","_nodeVersion":"18.12.0","_npmVersion":"lerna/6.0.1/node@v18.12.0+x64 (linux)","dist":{"integrity":"sha512-/LRwbICkbz+H2KxbPOshQDCgZhE3AWdGJ2Cci2bCDGw3agRab8yYMMDImYnMF5CjmAdGk56h1eYPJihJsw3rjQ==","shasum":"f9125cdaa76c4660a934d3717e2b45e18c1c90df","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.1-6ae5eb7d.0.tgz","fileCount":19,"unpackedSize":1634460,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICm0Aq62fBGTVMowJeRCrIlVz03r9+cfxnLtJrzRIunKAiEAptHgq1w4DSHNadphsXYj2+oo2dRLwW8/ZIO+JFudMaw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjW4T7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyoA//agEbgAWbPZYXnWrwP73iN4ngmHNYHbikisL9F7SAuo/G5/1c\r\nJTD+5uthtfMCMrF3QYiFlDwtkib9uRcCxXlbVXfPMqE51VlnfqpZhExTDzrr\r\nhh0jSo3y3k/BMZbdwgNJmcSDXKlQvHILdgczsAi2mDacAx4S5GilVvu6XGdW\r\nlkq85Nl9hgDtZ5DQrAdDCblZ3EO4MUfwATDIGVJ6EgfMVI5EXfv7Dn72Ktji\r\nLGVOciek/tGzfWtsam9uyRXm7nBBt5Txfe3HrAwa66BL/z+7ZwuM5LZz1wv3\r\nCSLHdDdbVr4dqdCSfTU5u5N3tKNEmjdy9aDRArNZAyGH2vVjgchqix5JebPL\r\nseTuVX47S0QSfdc0JxXR0xRTsy0q0WjSFjv+1EUdNK9/ztkVtaBnO4xPD1GL\r\nlRr3dRm0ZE2i5RI3pp4g8VEl2je9c841Cvl3Mp84edCqsRhPKK7MzOQ1kQx2\r\nMEUaPsOEQgFW2hsGpeo4kvZKU3rydX7owfIRXgJSR+FIFcjD+DnsN72mxjl1\r\nRD85mDZaoWB7gEUCWZbA/zwmVr6mH6REY8KexyRmnAz0CJTx0xdcyngnrjn6\r\nFDRq45riWaUlrgF7BpsIdoRj4bzaWlNLyCMmreFqzbNvRmsKkCtQXYYbESl/\r\nNCCX2JDRZEoHWjCxTKCevXFcBJ95xsIPutw=\r\n=HrXg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.1-6ae5eb7d.0_1666942202354_0.8121289774298213"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.1-6be59068.0":{"name":"ipfs","version":"0.65.1-6be59068.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.15.1-6be59068.0","ipfs-core":"^0.17.1-6be59068.0","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^2.0.1","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.0.11","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.157.1-6be59068.0","ipfs-client":"^0.9.3-6be59068.0","ipfs-core-types":"^0.13.1-6be59068.0","ipfs-http-client":"^59.0.1-6be59068.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^1.0.1","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"81311d5fcc6a5512ed3414aa592bdc9e6c481b03","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.65.1-6be59068.0","_nodeVersion":"18.12.0","_npmVersion":"lerna/6.0.3/node@v18.12.0+x64 (linux)","dist":{"integrity":"sha512-vug1eYtP3OXouadCoh4uwVfn3KAyUqhxgYdTF/JYsrChWL7Uw/suPrKdgJJNZzOilnnO5ytkrLT3N4v3ZEDv/g==","shasum":"a067c0ded61428313435d15fdcc23ac8e15af914","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.1-6be59068.0.tgz","fileCount":19,"unpackedSize":1633506,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2qe6zKOVA55JeH+yqRM24vIGvr6ETcw6+6KPWAUFxNAIgVleb9meggKIbd8R23nre5Y9MFMnVvVHFEwgnGPg1weA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjdo/7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrPIg/8Cda16Z5NItmcMRHVnrPOFwUNQkTMp1+TC8JIL9SJTnd71Uws\r\nakPPqIpZqlAIy9WbIeypqhA5sOEOsIrAXfIlChjaCIuLLhJxYovbdhMaY0ZN\r\nkdFaAlCNbx4asnQocWWWmEKayUBVPVR9QepLnP4m7bW4fd7VKAZ1t6+Oh9lU\r\nuTOGX2Lry8iCjGK5ZRo4FT8MZcfGpnVPCTaUA/SrsGGRWXx51gbV/j9YsSE9\r\noomNceYGVkYZk2yq+0onAyLvjDdcqd34JeIO4oa0NmS527vCx1VsaexXjOqn\r\nMkmv9ctCOie3SRIKBK9pzwWeNR7wZgJxANF2+iRf/6UyHTirYKB18Ab8OUXw\r\nOTXBKKgX2q1m7JHTlqrlpOdGIFgKNjgDELwYdtTb6C76O+rVd7KhZSKCbm3W\r\nklFm2cPszflEql/mG1RU59MKc3hkkTTwyv04rOsJMtBSBQjM2VT828oRZWMr\r\n22Fc9t1YomDUk/BzEevenFhjPSOXb2Ikl0BYq9B3dB+pY8goXgYJdr7ybNzV\r\npT4jOQ0AW9t00jb8iA5m6gDTpsRBg00/hFmeAacd5wkH2gNzgNAthlfpCrRg\r\nM02IYhhz1bV+M5BgUUafvkX1ZtUIdij/enZvCPrpkQtMETQDg1RoQEC4/9+h\r\nVVJ6v/PK+smuCIrrMmCPnuZzkBb3Ik9Ag+0=\r\n=7N3B\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.1-6be59068.0_1668714491743_0.8380502472099665"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.0.1-563806f1.0":{"name":"ipfs","version":"0.0.1-563806f1.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.0.1-563806f1.0","ipfs-core":"^0.0.1-563806f1.0","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.9.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.0.1-563806f1.0","ipfs-client":"^0.0.1-563806f1.0","ipfs-core-types":"^0.0.1-563806f1.0","ipfs-http-client":"^0.0.1-563806f1.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"19b0474216e0a7dd7363dcd6733379790b68a1f4","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.0.1-563806f1.0","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.4.0/node@v18.12.1+x64 (linux)","dist":{"integrity":"sha512-xdGaMFJxqvvTN7shnpO6QQLOQ3S5+6Ci8XBF32Jy6j+W+8/rfLYuH1ivRhycUqT9qzxdSzsriz29FY76wi71LQ==","shasum":"9dd04c8e1b53aac894529d734a3322a1d8c77b2e","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.0.1-563806f1.0.tgz","fileCount":19,"unpackedSize":1676473,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAc8iJX1fz2AS4piqOFGebqvF9P/tbq1HcmIc58o8YyTAiAqyQv1Hwkz7JrnSnk8nF0dUTDe8BWpoXnsuJu6WKuG/w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvFjQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqeLQ/+PBpDzo4qL9c83Z6AmHQax/e60PNTRQYN3FxFRXOfIIpvpgtC\r\nvHOOrve8CfUPxn/9hTWF3PXS3U52yN/l3lu97AU1R+s05kf8Yo59qP/+Um3m\r\nPRE9JZGeVFeH65dP2mdUt2gW7uxihawXLquEkycggbk1X/H9d2shRf0vPtpK\r\nEVIt0UpQmKZLfIL7EF7kQfJeZw/yX9aT+XLBcoU5Td458DUDCNz8MJUsQ4Pm\r\nIJx9QyF1kTL85I6ifo4B5Fw2ROocXkTPmG98wClU9bWkbezYoBnJpswf2XhB\r\n8IoMzEtLOvLSZoamMzBpOncYLgUrtrhv5po331y6CcpIoVp9VOLUXJlFY9f4\r\n2cELRXJZpfjzClflEPwdINd+3IaMbNgaSpFHnIhxWBRPHjAHKW7xgBa/kq8l\r\n52f83Q0Rr0ZsRT2lLN/ADzoWfgML+Y1MUNys+CcfpWq3ghYDNW2zxMXoU3lS\r\ncXn6vc2MDfDQQc6o7bXilvKMmfmk27PjJzGWVncDkxFmDP9M5DNGSoPQfLrG\r\nYkBp7srdR9dGEKYfC2nzTWd4+1Kn9QYHyqjgTEDQloAuUZ4XxyzON4gGf4vC\r\nsnLb62gA+z5TSTob5vxXbViHT1DFVl4l7zfAJp9b65n1pOQ6k7tKurH2ssUP\r\nA9krx8+IPfIQqJQfJfIW89TPdRESya/0OGs=\r\n=py2X\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.0.1-563806f1.0_1673287888114_0.8176429951037372"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.0.1-e85e5b6e.0":{"name":"ipfs","version":"0.0.1-e85e5b6e.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.0.1-e85e5b6e.0","ipfs-core":"^0.0.1-e85e5b6e.0","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.9.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.0.1-e85e5b6e.0","ipfs-client":"^0.0.1-e85e5b6e.0","ipfs-core-types":"^0.0.1-e85e5b6e.0","ipfs-http-client":"^0.0.1-e85e5b6e.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"5d268429a92d15e22b1cbf7fafadca662b131420","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.0.1-e85e5b6e.0","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.4.0/node@v18.12.1+x64 (linux)","dist":{"integrity":"sha512-uvV4z5qC2FXlnziA9ANpw7fMMYhZHDy7/Yf2XvegrXfeuYhfQxwy/Ax27sIXYZPFOXEjlyWedP8arS2hNVwTqw==","shasum":"d3ac2e766895e40c3464404a56a22864c7e9feb7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.0.1-e85e5b6e.0.tgz","fileCount":19,"unpackedSize":1608653,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgJQtxNZudNA9GoD0Nu8HE8aXuL5NsruWVMZXDCPIhtQIgDr+9SgjYx4IsMVYBAz0O32SM2ZhS+hBbyJvp7PkbOrY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvGgDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoV4A/9Em0YLTKLm+6T69i8ITsROi/61dv7+JNCMhexpuK6DCcvUGqK\r\nIgD75+ErCB+HGa0zXIqJltKa2jYpCi5YpqQxt4LKquA2YvBbtKsCuVSM3iAo\r\nJ2DixOf1jlEw97Q24iE1KdVg+logVxSqNlh7FumeHtqpix1eqfy+I0cRuNve\r\nZeCJ0q9/f2g77qEePygKkKo1YonZzDz0OIPCpeL5CRFLJCSmzlgzUpQhwBjl\r\n2sJu5ox5oW9ZgLlRnIAV5USLIsNZRJNuFIy4uyVkP+bdhW5o11YwDE0fMCf6\r\nRKEgCtQNrRC+tBJYhU6vTi1ZBdNmEu9XFqcqeVTiBPEfXdl7+hil0xUkAZl6\r\nZjzZN1tf5TgiI6OOeDPV1s6XBJAgy1ETD3B/hnkNeSunMt5WUef2PeF9NMSj\r\nWi5gfuEEixhgToSs2ezy/fAPzxg4ZwIDhqYUHsyJbAB9b988w8iW375uy6Fr\r\nYbbu16sDjU0eW9ZuEXQDhVwy9a3/zeX7aN/3aQpZomaDkkgi+gqPvumJxxwo\r\nPwHpxTpPBjHds0i45EUmRIRn5FdR1cBFVZ/tyWGU72tvhzl0XbFpGdMmLP8y\r\nCKDyFGvICV6mL1yD0a5cN5/IrYJjVr57dDRkeFXWo05GFUaJrOh4qYuMCuqo\r\nSRu54MMFbAPk80hQgLYWnyccT2lpnQA1o5g=\r\n=EzzX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.0.1-e85e5b6e.0_1673291779103_0.9379051854408551"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.0.1-2a6fede5.0":{"name":"ipfs","version":"0.0.1-2a6fede5.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.0.1-2a6fede5.0","ipfs-core":"^0.0.1-2a6fede5.0","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.9.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.0.1-2a6fede5.0","ipfs-client":"^0.0.1-2a6fede5.0","ipfs-core-types":"^0.0.1-2a6fede5.0","ipfs-http-client":"^0.0.1-2a6fede5.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"12b210560953c0358e012a120d162b5f3f32d06c","readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","_id":"ipfs@0.0.1-2a6fede5.0","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.4.0/node@v18.12.1+x64 (linux)","dist":{"integrity":"sha512-cLsEKmiKlM7p/NB8Bj6IE8PXip7OlG3/5UrOEVvM00on3f8Vo2YNhuDUD8m4Lukifcl3LvMt//AxpBLS5erw2Q==","shasum":"3951bb7a3d928c054919298da70d4c80b9923b61","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.0.1-2a6fede5.0.tgz","fileCount":19,"unpackedSize":1608653,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe+NaoeWbmWild0U7TGQVkzgwmQdLPS/IHJzXlY+Ml1QIhALimLUklcButrEPIvepm2S2jn9xlUCvXJddDeX0YNW3o"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvTGTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp5Aw//VF17fsVYc8LxdmOekO3JR0LfyXIFXjn0LsFr1J89ogp90Cjm\r\n+HTdGhywxk66W+FwkOYefyPGQNBg79alVUgYvYlIl1LRqTfIiemW8keJji5I\r\nb+IgYd62N3pgA5aPGyiT1PQvzs5PzsYUxBzjQMuCpHWxZ1BQCPEwd51REU4E\r\nHCeufHlKEq9xFLbW14mBxuZ9haYmX65pNTnLhb/FNmm1fbKabEWmCU7fNOqI\r\nVdznc7yycXMZj3J9MtQMlzPcFDAuznOviM4Mxjmlz8naXY1Xtk2L2e37KCI+\r\ntVtReSQ1pofYTjLN/l9HiutzDF4r4nUjQwx/w96gI+oVXTMD2YVqbNiLfps4\r\n4oM6L/w8RNGjo8i/0AFrPYbPWvqfuozeOx27NPJ9A7CFC3idwRrpgbZSy0ol\r\nqQNB+3Dpeq2Ifws6+at4vXxH/W1hfollMJQqTdXv+3QIuMBaQVZX9cocwhSi\r\nwyz7y5utkzLrEXfdgK7G+WkUs3/FjJXLGPCdMaDDFoDXr9M1GCSLlJ+MXke8\r\nVY+pTTB92oUdvgYc/etDSagiq7YuZdiayW04SKPp0ZowiXuQqtrmG/YO2SwA\r\nNtsfQ+fwBJgZjVqce00GcvqvK3qF08L5++yK6ne5HGBITSSyjf3lnp3CQJ+n\r\nBy2DagTZ8y8vfXIFzEmFm2v4Dt+7vHTVbpo=\r\n=nX2K\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.0.1-2a6fede5.0_1673343379159_0.5971147313502199"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.0-5f73ecad":{"name":"ipfs","version":"0.65.0-5f73ecad","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"0.15.0-5f73ecad","ipfs-core":"0.17.0-5f73ecad","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.157.0-5f73ecad","ipfs-client":"0.9.2-5f73ecad","ipfs-core-types":"0.13.0-5f73ecad","ipfs-http-client":"59.0.0-5f73ecad","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.6","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"5f73ecadd7d397029be8dd9bc0dcd82469f07359","_id":"ipfs@0.65.0-5f73ecad","_nodeVersion":"18.12.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-1N1GSm70EEA496G46yCc4fgEAQ0fhvNhjMw5lBM9g//yaz9OK536d5HtB8pH3MJrobbd1Q0+fgRT14a8tb52pA==","shasum":"d3c9b4623e034f225c036be615052b85d82168e1","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.0-5f73ecad.tgz","fileCount":19,"unpackedSize":1561847,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDp3Kn+N/VDlj99y/mdp4KgsLykWrNiF0t4jXZnKxLchAiEAhb1c6ATs1nnHL2nQGfrgq6WWLWvSs+irPI3ZNUslFKw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvZ0mACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLGQ//YT5S0wFkKcg6rDDWbwBCY8p7x/vGQBksc4H/UYevdaPw314w\r\nE5j9ZPw9qEGwUFdGIm9IWfOjmV4OK9zx+3GKERRVy5NRiLFzhuUoAvGFmIb/\r\nU34S4xSsOb5tfGBbdA0ywYtTqH6Amv/3/Nv3LM/jPx07W7J7A6hJkHbBpEUU\r\nUTxxluHKQddFm21wp7wrDk9SttFQRwyz1p3uxxS+M2f1MZy+hUJYmzCqIFFL\r\nQFryk/orLxBDfae11EI3afRjP6El+WekMNlCmvPZQNduLsAH3ji8pW+lsoq8\r\nmCUi0Du9GqcLw2yE4tQ4J6J1YqJsm4ow/vyW2uuUoelctMVQMd5X1s7EbexD\r\nj4z+eh0Wu8JCsP94Jmc8lcsgPQiKJtUFAVJxRQbGksWRFWeW29IUHehlgjUJ\r\ndPNUpHnU67afXvSV75EK2xLmiDL1+6EbQbk9qMNYeF5gRgwfQS7XZkAsiE/E\r\nyCWF4di5UM4Cb5auIi1aU4v8MvSsw/oD9lTdIyHinslB+Rg/hVfDxHvdZPzm\r\nyI0Dviff/2JTkZgdHzqjP1Way1sFucV1TyrksxrjZMeupcJdFOjom1n9ji/P\r\nU/GXEUGDWBKqV0B6GuHIQ1fghYJj1ww4ckOimOqlLuqVgB0BZ6NNBd9mzKb1\r\nTRGQygjp5xxnRtIcCVvLeAFb9T1S0NqBCPA=\r\n=7exa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.0-5f73ecad_1673370917863_0.07365960852592512"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.0-4b4c124c":{"name":"ipfs","version":"0.65.0-4b4c124c","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"0.15.0-4b4c124c","ipfs-core":"0.17.0-4b4c124c","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.157.0-4b4c124c","ipfs-client":"0.9.2-4b4c124c","ipfs-core-types":"0.13.0-4b4c124c","ipfs-http-client":"59.0.0-4b4c124c","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.13","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"4b4c124c4c49b1c60a68b4b8e24f1f00dd7f0517","_id":"ipfs@0.65.0-4b4c124c","_nodeVersion":"18.12.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-U52ABme5GQ3TejrUAhjEwzAUHujnrukJuB7Rd8U5XvAaGvzckCFIYQK/dzmVXwsjP6DeVuGl4j4rkLhEzBgnHQ==","shasum":"6afc8c0581b9380207023eb10aa8aa75b99214cd","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.0-4b4c124c.tgz","fileCount":19,"unpackedSize":1562451,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICx9YmmE7CXChJm3olzyIXOG+lLzr9X047cAOMrsqijUAiAKSnC2ggz6DOn4zhu2VZylMo18+mLqOctKO/QZqGKltg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvt6UACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoiSRAAgQFft3s/Rytoi6wGrO6nMTl7ZsDN2KLbgEI1St9Vn7nIjU/Q\r\nArRrnUO0rdJo7edPcA8ym1pr4iNBIBbvg0Lz8EbMErP73cy5fzGlZkO/ZtUT\r\n+kl5cT2nHTzgminE4KLFzNoN1/xKUJDiVefEeZYkFGlFxtTu21pYnoYFhwVa\r\nRDbOmaRubwfSKxAs8MmhObLf+FPtGHYBtlOCbAxBOC3QrOqlpDFMfag2yAhn\r\nFtKMchqZ07y2w4PfTwdOrzxLUFiMjjwI/AtMQttZ9keP6BEDc3jwyLAYdGOW\r\nRzenPY7VAmNIyHQiYtkXdEVP1WbKMS4X7GsDmnp6rmLNPo32JnSYetZIn/hw\r\nLj3bE2QxCF8dz2KxIfGy91rcsoyt8uuP1bglWRujA3nkSteDz5knj0aKaD+a\r\nkGvTbONRsaV0QVTwUvOeNaY+Uu5IeMtrtmiQd8oPUGHLeXyLDYp3fghJgaj8\r\nLmxBsHUG/CliGBL/VQbAYcYcRgftFSFp2yIQE7cQHG/I7Q2Y/mjsWxpxRaIh\r\nR8laMKu1AnwCBluOyfsE57Qz0Jqlv8R53q+59fgYR95lsnZEwuK86tsLe2ZA\r\nugXPAuHUbjSWlb/T5BNKyskDlnxdhGI7ZBCiIklI8N6CRaCF2v96ktmx1xub\r\nXjSeDtvzjGV1enrKYqHbfXEKZqlFNJ566Ak=\r\n=rnm4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.0-4b4c124c_1673453204267_0.024996006441824425"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.0-789ee585":{"name":"ipfs","version":"0.65.0-789ee585","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"0.15.0-789ee585","ipfs-core":"0.17.0-789ee585","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.157.0-789ee585","ipfs-client":"0.9.2-789ee585","ipfs-core-types":"0.13.0-789ee585","ipfs-http-client":"59.0.0-789ee585","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.13","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"789ee58556083ef71a4ef44e3358f86c5be101fb","_id":"ipfs@0.65.0-789ee585","_nodeVersion":"18.12.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-UBCVn3T4J6G8uHks1REAiCieRqJfItXe59msj5z+L8gNEXIOLD19Sa98g5ljDZdH+hpOAHbY5Qt/1409sdRU/Q==","shasum":"7a5be05ae2fb0fe95978ce0c214cac6ac77c7972","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.0-789ee585.tgz","fileCount":19,"unpackedSize":1539567,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAsdszQ2AxHdCHgT5pYRLVwGTZ7QYCVofxRlbkXbnSK8AiEAgpTjtAuOURg3B51h6xOHgYjAMn7AzJcxDSwECGepGCY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvuyHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqbUw//aEGGZLm7Ghvx1TNk1nkF/R/OQrtzFqiS7/eWmmcdAl0m8Mdb\r\nWH0dyzdTSGmvgJoFZQ6sOxgo3JtBoD/cUYwGp4zbGDzxccIvCRmYaJGNLYmf\r\n6HaLvmTCvMrHef61BTCYOm2Hbmi9NBGbZMaDJUDgGi2PwVh9x0QfxJhEmJEP\r\nd7cmxz/QxW0X8TnjM94uDXvufLM2v8bOBQYQrSElENxFbFO5QW+HxMBRwG8d\r\n6OuzgBALJMPbxS3afc1KZORMx+SEJFDw2/B+glPsmbIF0UCifVv8kgvqB9rX\r\nCeIUXyNmdJtBud+z8aZznwu01a6sKt31KEBGfp9FiMcIhsBgJ8y/vk4czFDv\r\ntVNEKbcdLO7xDLf/R3/i05eaXTN/HN1j033jsUmPtGJS49TQgmO+4bKIn21Y\r\nGHaCFR1A14IUE6eO2qwVuTEvGVRmiNBuMfGAca8a9lRuEzBImWkMYJTCfYRS\r\nXWek0GaElPQwJPC2BX19zO+mNExMxaUF7VjvCXMICbLPo5vFpIY0QeBjQnpD\r\nrtoSjgDHgWkVBtZce1V1mX79WDWjjofFuCVvQ/etRz750tymvmJUHbYgwv3T\r\ni9s2mkIVh9T5K4JjkixVgL0+C7Jrp9A8+HP8tBxJkBcWrO1sH6pC8ZntVE8K\r\nJhxiWqL+0J/3qLXEsIGfocGHvnsKZ1LCpGg=\r\n=GNgY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.0-789ee585_1673456775228_0.6786798336855466"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.0-fa578bac":{"name":"ipfs","version":"0.65.0-fa578bac","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"0.15.0-fa578bac","ipfs-core":"0.17.0-fa578bac","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.157.0-fa578bac","ipfs-client":"0.9.2-fa578bac","ipfs-core-types":"0.13.0-fa578bac","ipfs-http-client":"59.0.0-fa578bac","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.13","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"fa578bace93e459849a0ffcebbd6f222dc05652d","_id":"ipfs@0.65.0-fa578bac","_nodeVersion":"18.12.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-uNeVxjhSqgyw/YmkK0PWsAN2/o64pUjG4bxyEO9RasJtUli+sL5pGyR8NKkEdiNn9hOP/5E7PmbEHVKn4MjZzQ==","shasum":"de5e562e57e3ecb146a1a5dc8f1710ac76143cbc","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.0-fa578bac.tgz","fileCount":19,"unpackedSize":1539540,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID83rGS1BQaZ0n1GT64rzBhBbCgnp3Y7OTnOzLdvWtnCAiEAvEA6DXH/tEt+I/ZoMP2ymyz8Czd60jDskusvYobxMF8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvvcLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpuQA/+Pg4vDFCPc1hXLGK7g5OLhnyJYQ8V4q/cIcNTDvM3ds0Mdc3v\r\nbkZGIkth4VbYk2VQ/MwPmU6Ql45Bpy7TMc6yHaa6CVlf17A5Ta5Pr7AW/i2e\r\nYiJmNp78/ZlZuY0LtbQmJ8r1oj6l/baa4Gx96KUav8SACQyMdnTFy+6a7GFi\r\n9h05gCPRxi3I+HJU7tGQnTCUYTclEUIZ/0iG0+qYqCp4pwLAk0fQneQyJFL3\r\nSj/MrFYgdmjjMPbWRXUlE5S5ugQoxiL6+T+nOUHvjFWrXY6jFFIN9LqCi6Wg\r\nNnX7FyNSuUG6kGRAndxKRrG2C1BjoKrF30LQvwBLRg34Px7ls2LRnIiihGRO\r\n1B7lrHNusQvUBELeNgCcu9uTjYIf/qgOaxicb/DZP8Y4jkGW6/LaklVjTKC8\r\nFYmFva41uZ2QvCqXERYRGZe0EqxFnnz63bRQYLhZGZV79HRkDaSrPHxEuVlf\r\nQgruOsYVzt8L93psQMSWS9xdWVatNLSQR8WO5MaModzzDyFMW3xCymwTEufA\r\ndjbnsQhQ0CibTyDGD9yIbRcccI/DQPqSNbm7lCxT32AQ4zW0npf/YJzF28h6\r\nrk9wPO6rkPzo4zwWf7Jg5yLwyOGrpmFC2zrbnhj5tYRievBigAC5TimfQep1\r\ndzy/mUwxgnrEG+0biiNAE3fU5jbWTqOinlM=\r\n=TMRR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.0-fa578bac_1673459467564_0.890489267920817"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.65.0-d1c3abb3":{"name":"ipfs","version":"0.65.0-d1c3abb3","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"0.15.0-d1c3abb3","ipfs-core":"0.17.0-d1c3abb3","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.157.0-d1c3abb3","ipfs-client":"0.9.2-d1c3abb3","ipfs-core-types":"0.13.0-d1c3abb3","ipfs-http-client":"59.0.0-d1c3abb3","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.13","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"d1c3abb32b57379b5446d5eda232d7750a2ecff0","_id":"ipfs@0.65.0-d1c3abb3","_nodeVersion":"18.12.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-bMBzGckOwfPaU3HM7wh5c60WSjmr3DsxCh/ByD30FfQtUE0BIB9ZmLtZzrPi3L9mIofcFIcvbIHyKW9Y+AD+/w==","shasum":"cdcbe50890f6d32c8365c70726d23e70b41ce77b","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.65.0-d1c3abb3.tgz","fileCount":19,"unpackedSize":1539569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFw6I/3fyvgkRGJa81IhemncGXSfVEXsOoR+wbtxpandAiAj0/tHe3eu0b1vSp/OQW0kc9mwKbRHCAoavPRaNhUb9g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvvtuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpkRxAAlCMePJGZTOrAUlD1ZOV8brM+AFnjinf5IAOJ5t0q1qpF122Y\r\nmUf4SLHX2kvzaZGEoqH8qR5/nITIuh/4n3O/VSQoo/vgxJJ6589KbTLWoQwG\r\nLPpRg0WvHzfVvVprosZMFu3RIDURvrunFNP0iQxFsFiJNfJiQTGn6/WyZcMe\r\nT4yI6rGv+/kmb8lnguFYB7EwyGd2MkWPNAySf4fnDZt8IGvXTO1WwowZ8z7y\r\nQdkwf+SZ0g2yWIlq7HuMZYHKEB40hyKCntcn54PBv4auUGLs5G3KIakrT5W/\r\nIq5rQUUW3Yekz27MXMS3v4nn8JidoH+qUWMfSyGM2wSVV1Q0Pq5bxn64gR+A\r\nrhr6lhk2G6sv3FdIUMX2QecZvwPPcyS/MZCySL8GmV074jr6CdHLZuFgw/6J\r\n8QBjCxS4zlAs9Bw00nFUPPzy2nDcNMmFVMG7vn/wlSKxc/0QrZR0+qFWHIp9\r\nLmq6GF80pzIlRBl8uG1yC5HTemFaOOb8HO2DKUcWKvDILbiyBpEuVH7muk9X\r\n5Zhd6oKQLKJJHo0WzxxSwCkXbB5SfaI56egnU6fk0UOzDMv602I5L9cQNlOA\r\nPC3TpRLeb0dH7eYPRlpNMHyGD01vV47nCJyb+rEq129P9tx/5r9bKXTGckBQ\r\ncFMTyDXvOEW/a8g7dA8Knd1Wr7rIR+EknA0=\r\n=mdPn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.65.0-d1c3abb3_1673460589706_0.09878754923166211"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0":{"name":"ipfs","version":"0.66.0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"^0.16.0","ipfs-core":"^0.18.0","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.158.0","ipfs-client":"^0.10.0","ipfs-core-types":"^0.14.0","ipfs-http-client":"^60.0.0","ipfs-interop":"github:ipfs/interop#deps/update-multiformats","ipfs-utils":"^9.0.13","ipfsd-ctl":"^12.0.3","iso-url":"^1.0.0","kubo-rpc-client":"^2.0.2","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"6e940670681859682d41ca1339744955c9ee20bf","_id":"ipfs@0.66.0","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-HlXgxphNlyV3qSLDtgDKlzXn+0QE2wnTilGkJFRIwECzXCPNPXHq7V8mczvRPCVIhsA/z4TfWaNhe2ujPyIo1w==","shasum":"38c35d9a7976d0e1de04cb58a428cb923d9ae821","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0.tgz","fileCount":19,"unpackedSize":1539504,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCE6ripE08zcW3rSOqLgCAd4qIDEhFickYFnuR5hXeGwgIgR8YJkWYT+5+Yx6jcNyla0CtuOZcrmEJSA4Qgulbk/1c="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjv/D/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmogng//RNa6+ebJ5v1VKTrWnoDzKcsd5pKIjapokpgdz7bJqqIFYO7H\r\nGZGKtWyeLhWHfv475XpBNGStHYKtwBW883bhjEJKwqLHlnNpGG03PwpJbEDb\r\nrlNH0gd9MPXuP1WKd/ZeTOZCN4p/XrEhMDS5xDjkNTI3CrfqQjJysErGeAi/\r\nNPCiEe31f+Cxymr7JKfWkuSnI/rFO0bcuFimUVY62RtI66CYMi08mLEUcimu\r\n2XUcJiWN7rVKpbTlLkqSfGBr6PezKR/MI7Jo0g1VieTbSntbEuwX1FDHWnTm\r\nzKFNWd4/aSN6VQSrHeXhfssKtPL2yK7BUMmgaP3ry6jl9zkD6ifql8VLA6oe\r\ngzs3PScWyjdmuwar4DNF4dXEGY09mUiwJjw6aJSsG2WA6ddzrSEtv6hsE+e+\r\n/5JFJf19hTEIwztDMsPe/tEn7iMF28G4QeYY2H2FfLWXjz3+1h8yd2ucUWBQ\r\n73fFPX7rB50WUFI3HLOIzKImPSSNJIT7UZwNZM8tlyqkVdxQMfvpU0TlBRqD\r\nIRqWTFy0KQMtgtUbrXMGbwpKbALKC0sPSBtIuCLCU7kCoq5k9Ma2eRRcK97u\r\nzh/wd5eVhWOshXsSNc450W++1KaajG/BdOfB57moxAjEKOS/0Dj+iQNOzRnt\r\nEY/FByNdkSLjMSI6femwD45waklg7OHY6wE=\r\n=90v3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0_1673523455291_0.08542133352139158"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-6eeb1be5":{"name":"ipfs","version":"0.66.0-6eeb1be5","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.0","ipfs-cli":"0.16.0-6eeb1be5","ipfs-core":"0.18.0-6eeb1be5","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-6eeb1be5","ipfs-client":"0.10.0-6eeb1be5","ipfs-core-types":"0.14.0-6eeb1be5","ipfs-http-client":"60.0.0-6eeb1be5","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/js-ipfs/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"6eeb1be57c8366b82351030e49a5886d1aff8bf6","_id":"ipfs@0.66.0-6eeb1be5","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-qHosknI/gjpXR8iRIUglEHlYL0jeXFzmzPcLeQqiaHUUPBRloOX8zQhiPFcNNle+49ZVKiAQwt1V8QZaEX1svg==","shasum":"08f94f21ac37100324a5b29250ca4940f83b4f45","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-6eeb1be5.tgz","fileCount":19,"unpackedSize":1539540,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGJzKu1NPp0G4ZEh7gB55JW89XwUJYXUtwy5fb3sRYvQIhAOf9mH7iGn97Z3mNdjdjx4TZAd12vCNzi9Cy1dgrNiJt"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjwaEYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpjSxAAm7Lnpvjd1DGGYxVY80N44D0e/AT+9E3aj/cueslKA7VLW1z4\r\nVcBqCXeVFyiUizL/RRDyCnZO81DnSrw4a+YDTETZE241/mCY4XBldDurWj8c\r\nyyy+LH2aDyJDbxMliEJx8bRwpW+/bJuR5Q3CF6vysDdv5a2eTZhBCiTVTwfy\r\nyr4IC1u7FB1I9kdWTaNZ6pRVqcfYniai6IeEjLLx0ecH8un/punMvq+8zM6t\r\nYU5+WlVgHaRdvvgLSQZJ7IWzzgRmAaCHfYuF8JAneA5/p4iVsw2qHhP9N3K6\r\nEYF6k2NpdcoKt8+7gl6jLLS0Ik8THpoUm9RbrDsY39bYtDC60v0UX1Myp4+q\r\ni8xX+GlZwBs5VUJpPL/L6P8bqbDdTCSmsDq6TvEQ1jJhj/W2obDc4gfbT8Fz\r\nDLPVGNsMMomZ6MJ9y9TGB2CFHTFKkOjE79vhkpZmod8gNQMUF+jWnn779WZg\r\nKIcbX/D/BLFcO0dBifokjplZlbZloIIevJMzKHGmzlDvFgyuTajVtMQ9pVYa\r\nq33QHGEsS6Bf1OC6vywW+GPqvH9dxM5SkifdWwUQqizD7lMJgo42vBSwy8b6\r\nM7i6uDg2Jt24fSI7npdTeqzFuRA5HIk/CbOvRhtcZcSEkXFVAyZ4KCVXJJZq\r\n95qk+cnEzNn+a2DNJS/im5NXkJzR3X38YzM=\r\n=Qo5d\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-6eeb1be5_1673634072377_0.45232390532582145"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-ab02e8f8":{"name":"ipfs","version":"0.66.0-ab02e8f8","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-ab02e8f8","ipfs-core":"0.18.0-ab02e8f8","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-ab02e8f8","ipfs-client":"0.10.0-ab02e8f8","ipfs-core-types":"0.14.0-ab02e8f8","ipfs-http-client":"60.0.0-ab02e8f8","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/js-test-and-release.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/js-test-and-release.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"ab02e8f8b3cf8f4eeb9991fef3b0104728ced675","_id":"ipfs@0.66.0-ab02e8f8","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-g+WQvZIEb3U8MQpIzmahP1Ck8YXXHVwF29yhoDdld1Tw2ODXiSJr7oP26Wqmt9i2b7H/0Se6rFXi8Dc+XKdPrg==","shasum":"5b796358a6f8481f125b6e7f7572f9fdd0e53c21","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-ab02e8f8.tgz","fileCount":19,"unpackedSize":1539475,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtJ+zZpUiHvPmxUY7PXOz4WKB4K4GGn/mReuPPmtCpxAIhAOBl6YJ6EGFjFEKXzDoLmXon/wtib80FIU+FGGM8cjZm"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjxpOcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmocChAAmKQ8BOOYTxs/xuh9+VTn/koO5QeFJWgrTA5YeezjADY32M5j\r\nzE7XFgdZSCSY/MuhhClNr0Yry3PhZiVu6alXycWAMks5FkZRJLGktEinJgks\r\nQN0kqfIi3yO4YU2/6dSZ+6J516aZ9Jd5UQyjTa8u6dJk7sP06uY0YaDSPdmH\r\n1domXGbxIumh33qfquPUBBHE3pXpR1qhQ+AMIyq1Zp5Tdbcx6Y5IyM2JIOAe\r\nC5K3yGIdKLM1TkMaPgBQvTC0Zs78upwrgwqy+5JNO1stNwrBlE3NB02v5hz6\r\nMRVVWL5anmmwTtGBdYD+JFomVdvoOQedzFMen5vbLFOQTNU/q/X0UqArhwrG\r\ne8l+8Qj9V3N1D58aZYl4iyQQyK6RBo3E9bXNcakM1HaHbEq3dwmzRZjtcQlb\r\nXD9TaqrFVYwP7MXfIDV20K6ChUHKVkiQjJMTP3b6nr2v++juM4VQbFpxzUQw\r\n8aIgkmpLsl0YoSP7uzgPEIL/Oi4iO4zvp3+kwADpvC91JNaH8T6WVOEJtG/n\r\nXD8coVBJzuf3lKGYq/miJozNP1djqxT4OuJOIm+HbmkpoBqVaTgiy5vA+iTm\r\n5fSc+5NgyLWg9K0CBxJRT9C1PKGIYNviOuxkwsx4+UIN04b0MFILdxQ9lWgl\r\nhOKBkZZco04fyMLXETUj3xg1DBcZvQ5Y6Bw=\r\n=Q+60\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-ab02e8f8_1673958299802_0.1388952773921972"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-3bcabe38":{"name":"ipfs","version":"0.66.0-3bcabe38","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-3bcabe38","ipfs-core":"0.18.0-3bcabe38","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-3bcabe38","ipfs-client":"0.10.0-3bcabe38","ipfs-core-types":"0.14.0-3bcabe38","ipfs-http-client":"60.0.0-3bcabe38","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"3bcabe3818ce8bbbafe0cbb68749b286d8a7edd9","_id":"ipfs@0.66.0-3bcabe38","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-P6OjHD1k0+eP4vKAJkbkwCEkoq1iQEj/fpbfoZxSV8XDkNFLTWku5amZpm4HHpAaVSasw+AbX28qj+DiyDfyWw==","shasum":"823299acd81b1352de263b836ab02d137546f4c6","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-3bcabe38.tgz","fileCount":19,"unpackedSize":1539742,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrnUAZSuwGmPqVTzhavv0Y0UI/k/ftaZJ1Kira/rjF/AIgCl1j3Hb9vWh6xCV4Beg/yuOq1zv4NKHeMspTOmVDKZU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjxr+PACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3+Q/9Ho8U5fkODEZQyeQEbw65T5+SQQmyPBcvXQDFr7Mrj54hD1si\r\n8XKHgLOCNhFJ6dBUo1fRQuaEq98OlUkKzAlLunLCwn1ojwOiZjYE+TzWr9Xd\r\nn2dtaKoGRRcR53OdOS/eIoCJuq8pqrQObMwhbF25NOGT0gxifAT+qnRB/iiz\r\n+yYvmM1BKjA4z5uKWlRvwHqKk2gPp3t8zFOTFD7gmhajW9KnG/VFbUxLUE/5\r\n+tdypTbF0wyvmiRq/J7/DZdI382kCoH8aKZAqbTIIGTPOFUzV97aa5lizUpH\r\nsutpBpqTgmQrukypM/6hvIR5n+NzRxzvOpwuEnGlkWZmbluTUldwPsre6fFh\r\nGU427DhcQOLcHY5BPK8NZOKgrkqPpWQjVIfzlo8KgpKWhyLGwqB7tAKt2iM8\r\n90fZRch1PqYyxxN3AFMxPo9QZfnWBjru/iTWNwg1XIYMdT1WB5/hPt1oU5X2\r\nM10Dd+o4JhgY65JHoakDZk08LA625I4eF1iRG4SXqI3Fl+wIxHY+MufTH+Fq\r\nnrnv1MuIzRa6Vsw1sTWjl/NCpYFxsvDedr30DLOBvPiYSkFpbsuY1bIIy3jR\r\naWOD0BmBfXN/R7ggtrrz9yC6IRCayL7lQUo5Gy8BZZUEsCN+O9Lp0ixwHflX\r\n7ww0NgA1TjTLcOpkXzENfC7MWare3teVLzk=\r\n=2Fea\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-3bcabe38_1673969551477_0.5339933355943516"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-b64d4af0":{"name":"ipfs","version":"0.66.0-b64d4af0","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-b64d4af0","ipfs-core":"0.18.0-b64d4af0","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-b64d4af0","ipfs-client":"0.10.0-b64d4af0","ipfs-core-types":"0.14.0-b64d4af0","ipfs-http-client":"60.0.0-b64d4af0","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"b64d4af034f27aa7204e57e6a79f95461095502c","_id":"ipfs@0.66.0-b64d4af0","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-P/NWe4G9fJs6HeGI2+UWbuNXO3wIaH3KHvkrL5/wNCKKOFysvlakBYVarinvh0R0CBGlSL2YO8/nZ/k43ZBCtA==","shasum":"3c6d7d84b87c0d8b51b227108d6c1c419897d216","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-b64d4af0.tgz","fileCount":19,"unpackedSize":1539989,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUJAf5jRhKkSrQRTncGVnNQNDftSaRsO8J+XuneektwgIgNEws0L2nT371NCFbvJePPJj72hWOskFRiHGw+2SZUMM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj2kwWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrOcA/+KRcj5fHpOLcTiiwk4i602zE2YdfgsLdsiWNMXPMpvTV0QwKP\r\nZHQoHd1CpV5ZtBtt50VAWGMKyswN7nWbG2AdkzfDOOgwga/8AdJQzGHWECha\r\n0x8S4HmIpO0vpA1JMNbEd0YSM0qA/ZXqK99G/AfBWdKuVSmb6br4ynr68Pyd\r\nPHaj1jbCH1uD7lwCweLiQGUXPB7IKyprNmozy7Ar1VRs/hb8hqZysnypOby9\r\n0sdPO5J+qaCXAchpn+FIGfdIqpwVrEwKFeWavm8KQZ4biXN+uOeb+5nXYuEk\r\n9KsfvjHsl+LAnoejCZJ81ueZrw23obEA4TO5v9qCoJTvKxqRdr0cDxUrYgp/\r\n6wtlsw1xe1vjiomNXjyybpKuLFo+jFFy9FavtIGJp8OaUFWtHzaQ3g8zceUF\r\nWZKZ/xKvQU4ZFdMzK9d8FJa6VK5c6q3K3x2LUuLfppZcHMPnCFFjU1rcrseY\r\nUchkEquGhWR0/mU8cnEYtTStywvzxRxR1noc6PZqDKUvXcN93ihNJinClyP1\r\nOwCaxwLU3Y1OHs9Ruf1aSrIUV+X4O1gY2E8z/qh3m1YLi62zQpknnf5Xh3mK\r\nM5YgiSve3dCwAH1aeohRL/w+IxtdZLfTkF0NZvG39K9fjhewLt6mYIUxWS/Z\r\nTatLhjKQ1/SmazoyRm3ya89dak8jVg1cEbk=\r\n=LCGN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-b64d4af0_1675250709891_0.9099564842488854"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-e64813f6":{"name":"ipfs","version":"0.66.0-e64813f6","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-e64813f6","ipfs-core":"0.18.0-e64813f6","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-e64813f6","ipfs-client":"0.10.0-e64813f6","ipfs-core-types":"0.14.0-e64813f6","ipfs-http-client":"60.0.0-e64813f6","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/helia)\n>\n> 📚 [Learn more about this deprecation](https://github.com/ipfs/js-ipfs/issues/4336) or [how to migrate](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS)\n>\n> ⚠️ If you continue using this repo, please note that security fixes will not be provided\n\n# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"e64813f6fdc681328da7cb893c93e1f4f70bfc99","_id":"ipfs@0.66.0-e64813f6","_nodeVersion":"18.16.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-ptQEfiuOU5qoePWIGmc7GGluskVDMQeM2J9bjEpMzzbMMvyHs89Ven/pSVLdn0D9+7ztFebGohzeHV6wnOsFgA==","shasum":"8b5f47f2005d521a224fd63ab802604e612668ab","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-e64813f6.tgz","fileCount":19,"unpackedSize":1709346,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3o7kdXtK7dxmJiIfgerqqDHIz58DgDTt0CPXznAMFrQIhAJi7JscHT79oEj7Cer2zBpDWODH5Er8e4c8pn6VVUJlu"}]},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-e64813f6_1684953982105_0.3391530623368815"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-4694e806":{"name":"ipfs","version":"0.66.0-4694e806","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-4694e806","ipfs-core":"0.18.0-4694e806","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-4694e806","ipfs-client":"0.10.0-4694e806","ipfs-core-types":"0.14.0-4694e806","ipfs-http-client":"60.0.0-4694e806","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/helia)\n>\n> 📚 [Learn more about this deprecation](https://github.com/ipfs/js-ipfs/issues/4336) or [how to migrate](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS)\n>\n> ⚠️ If you continue using this repo, please note that security fixes will not be provided\n\n# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"4694e806aea15c66db32e3b4be81c0a5e2fb8ade","_id":"ipfs@0.66.0-4694e806","_nodeVersion":"18.16.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-+v7slmvItewQ7aRqzgGxG0tjBgqoBksmVoivTO+8KvjBzaaHcJVAKDsRYrsi7W+JysTFiZkbadjmQjNmV4WKDA==","shasum":"e87060089f6db993d207f6366b29cd04900eeb53","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-4694e806.tgz","fileCount":19,"unpackedSize":1709346,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFF9T392GKCmrqCWOH0tTISlIaYmpDxUas1l1szwoNT1AiEAwR1pU+xEFHvkUIKJQMFpr3zyxg7JK/MGG43Qz8j5MO4="}]},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-4694e806_1685014338230_0.6229977799455162"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-6d95ce08":{"name":"ipfs","version":"0.66.0-6d95ce08","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-6d95ce08","ipfs-core":"0.18.0-6d95ce08","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-6d95ce08","ipfs-client":"0.10.0-6d95ce08","ipfs-core-types":"0.14.0-6d95ce08","ipfs-http-client":"60.0.0-6d95ce08","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/helia)\n>\n> 📚 [Learn more about this deprecation](https://github.com/ipfs/js-ipfs/issues/4336) or [how to migrate](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS)\n>\n> ⚠️ If you continue using this repo, please note that security fixes will not be provided\n\n# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"6d95ce0864055e5236ac88c0999460ebc5075c10","_id":"ipfs@0.66.0-6d95ce08","_nodeVersion":"18.16.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-bJZzT+RL0c7mtQqIh8qvjpU5DyjKn02hgH0IreY9y+8vgLSuM5qPRNXFlolVB3P6xdedEOyx+Twz2qjjr4JR8Q==","shasum":"726d124765891e37ef8e9bf69f9360813af54557","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-6d95ce08.tgz","fileCount":19,"unpackedSize":1709346,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmJRnzBbayUkOlbcfolrD0XEZqKB8FhvQPtcDrgQjZUgIhAI5pspjKxv4KjgGyJDXE2opAPGRvZb7JS4rI4clrTy23"}]},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-6d95ce08_1685016673869_0.31122499116758773"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.0-7b79c1b8":{"name":"ipfs","version":"0.66.0-7b79c1b8","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"0.16.0-7b79c1b8","ipfs-core":"0.18.0-7b79c1b8","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"0.158.0-7b79c1b8","ipfs-client":"0.10.0-7b79c1b8","ipfs-core-types":"0.14.0-7b79c1b8","ipfs-http-client":"60.0.0-7b79c1b8","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"readme":"> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/helia)\n>\n> 📚 [Learn more about this deprecation](https://github.com/ipfs/js-ipfs/issues/4336) or [how to migrate](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS)\n>\n> ⚠️ If you continue using this repo, please note that security fixes will not be provided\n\n# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","readmeFilename":"README.md","gitHead":"7b79c1b8df5c818dc124b346ea28330455732d5c","_id":"ipfs@0.66.0-7b79c1b8","_nodeVersion":"18.16.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-cqghyLOV35l4uZkVF5oybxMCp1JAlKQNKbH7wNs6FLR+Gc+K3J7yZyWPWWQi+21QVFiLIRJJvNKyigpGbaRRYA==","shasum":"1d28ac858b3d18fda178f94bdd8b3e18183addaf","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.0-7b79c1b8.tgz","fileCount":19,"unpackedSize":1709346,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBjuCy62RQ6rxFgf4n9p6dNQEys9qLwmL9JtQqXuO5tMAiBo1TJ7oCvlH5TCgInHGa5N72zwrlwgdxmBFthg8QbrdQ=="}]},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.0-7b79c1b8_1685018816238_0.7616834968961872"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"},"0.66.1":{"name":"ipfs","version":"0.66.1","description":"JavaScript implementation of the IPFS specification","license":"Apache-2.0 OR MIT","homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"keywords":["IPFS"],"engines":{"node":">=16.0.0","npm":">=7.0.0"},"bin":{"jsipfs":"src/cli.js"},"type":"module","types":"./dist/src/index.d.ts","typesVersions":{"*":{"*":["*","dist/*","dist/src/*","dist/src/*/index"],"src/*":["*","dist/*","dist/src/*","dist/src/*/index"]}},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./src/index.js"},"./path":{"types":"./src/path.d.ts","browser":"./src/path.browser.js","import":"./src/path.js"}},"eslintConfig":{"extends":"ipfs","parserOptions":{"sourceType":"module"}},"scripts":{"build":"aegir build","prepublishOnly":"node scripts/update-version.js","lint":"aegir lint","test:interface:core":"aegir test -f test/interface-core.js","test:interface:client":"aegir test -f test/interface-client.js","test:interface:http-js":"aegir test -f test/interface-http-js.js","test:interface:http-go":"aegir test -f test/interface-http-go.js","test:interop":"cross-env DEBUG=$DEBUG IPFS_LOGGING=$IPFS_LOGGING IPFS_JS_EXEC=$PWD/src/cli.js KUBO_RPC_MODULE=$PWD/../ipfs-http-client/src/index.js LIBP2P_TCP_REUSEPORT=false ipfs-interop","test:external":"aegir test-dependant","clean":"aegir clean","dep-check":"aegir dep-check -i ipfs-core-types -i @types/*"},"dependencies":{"@libp2p/logger":"^2.0.5","ipfs-cli":"^0.16.1","ipfs-core":"^0.18.1","semver":"^7.3.2","update-notifier":"^6.0.0","electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"devDependencies":{"@libp2p/webrtc-star-signalling-server":"^3.0.0","@libp2p/websockets":"^5.0.0","@types/semver":"^7.3.4","@types/update-notifier":"^6.0.1","aegir":"^37.11.0","cross-env":"^7.0.0","go-ipfs":"^0.12.0","interface-ipfs-core":"^0.158.1","ipfs-client":"^0.10.1","ipfs-core-types":"^0.14.1","ipfs-http-client":"^60.0.1","ipfs-interop":"^10.0.0","ipfs-utils":"^9.0.13","ipfsd-ctl":"^13.0.0","iso-url":"^1.0.0","kubo-rpc-client":"^3.0.0","merge-options":"^3.0.4","mock-ipfs-pinning-service":"^0.4.2","url":"^0.11.0"},"optionalDependencies":{"electron-webrtc":"^0.3.0","wrtc":"^0.4.6"},"browser":{"./src/cli.js":false,"./src/path.js":"./src/path.browser.js","go-ipfs":false},"gitHead":"bf1bc8b18d750d5591bdd575a6d0f4c067d61d0a","_id":"ipfs@0.66.1","_nodeVersion":"18.16.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-QjyS0Axq4RPUqElBP6QnTZ+G9u5dEpLUWkq9smHZs8VT4Qvvu3aHq5fBccYq2BlgbckWw9wLr0Sp1J7OtNQMEw==","shasum":"6258c0144b8880e2f3765959fb40e0ee9dcbfbc7","tarball":"https://registry.npmjs.org/ipfs/-/ipfs-0.66.1.tgz","fileCount":19,"unpackedSize":1709280,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiY/iDqnNvPlV9bxp1kMVMUGJ82D0AjNvSbPTmM2QUagIgWuyLQLT3EkTz2GHUWagcBZNgLjmBU+SMG39vbC2LN9o="}]},"_npmUser":{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"},"directories":{},"maintainers":[{"name":"jacobheun","email":"jacobheun@gmail.com"},{"name":"daviddias","email":"mail@daviddias.me"},{"name":"achingbrain","email":"alex@achingbrain.net"},{"name":"alanshaw","email":"alan138@gmail.com"},{"name":"hugomrdias","email":"hugomrdias@gmail.com"},{"name":"ipfs-npm-publisher-bot","email":"alex.potsides+ipfs-npm-publisher-bot@protocol.ai"},{"name":"npm-service-account-ipfs","email":"npm-service-account+ipfs@protocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipfs_0.66.1_1685026821151_0.09503659755424043"},"_hasShrinkwrap":false,"deprecated":"js-IPFS has been deprecated in favour of Helia - please see https://github.com/ipfs/js-ipfs/issues/4336 for details"}},"readme":"> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/helia)\n>\n> 📚 [Learn more about this deprecation](https://github.com/ipfs/js-ipfs/issues/4336) or [how to migrate](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS)\n>\n> ⚠️ If you continue using this repo, please note that security fixes will not be provided\n\n# ipfs <!-- omit in toc -->\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-ipfs.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master\\&style=flat-square)](https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster)\n\n> JavaScript implementation of the IPFS specification\n\n## Table of contents <!-- omit in toc -->\n\n- [Install](#install)\n- [Getting Started](#getting-started)\n  - [Next Steps](#next-steps)\n- [Want to hack on IPFS?](#want-to-hack-on-ipfs)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs\n```\n\n<p align=\"center\">\n  <a href=\"https://js.ipfs.io\" title=\"JS IPFS\">\n    <img src=\"https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png\" alt=\"IPFS in JavaScript logo\" width=\"244\" />\n  </a>\n</p>\n\n<h3 align=\"center\">An <a href=\"https://docs.ipfs.io/basics/ipfs-implementations/\">IPFS protocol implementation</a> written in JS</h3>\n\n<p align=\"center\">\n  <a href=\"https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core\"><img src=\"https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg\"></a>\n  <a href=\"https://travis-ci.com/ipfs/js-ipfs?branch=master\"><img src=\"https://badgen.net/travis/ipfs/js-ipfs?branch=master\" /></a>\n  <a href=\"https://codecov.io/gh/ipfs/js-ipfs\"><img src=\"https://badgen.net/codecov/c/github/ipfs/js-ipfs\" /></a>\n  <a href=\"https://bundlephobia.com/result?p=ipfs\"><img src=\"https://badgen.net/bundlephobia/minzip/ipfs\"></a>\n  <a href=\"https://david-dm.org/ipfs/js-ipfs?path=packages/ipfs\"><img src=\"https://david-dm.org/ipfs/js-ipfs.svg?style=flat&path=packages/ipfs\" /></a>\n  <a href=\"https://github.com/feross/standard\"><img src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/npm-%3E%3D6.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"\"><img src=\"https://img.shields.io/badge/Node.js-%3E%3D10.0.0-orange.svg?style=flat\" /></a>\n  <a href=\"https://www.npmjs.com/package/ipfs\"><img src=\"https://img.shields.io/npm/dm/ipfs.svg\" /></a>\n  <a href=\"https://www.jsdelivr.com/package/npm/ipfs\"><img src=\"https://data.jsdelivr.com/v1/package/npm/ipfs/badge\"/></a>\n  <br>\n</p>\n\n`ipfs` is the core API, a CLI and a HTTP server that functions as a HTTP to IPFS bridge and an RPC endpoint.\n\nIf you want to integrate IPFS into your application without including a CLI or HTTP server, see the [ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core) module.\n\n## Getting Started\n\nInstalling `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:\n\n```console\n$ npm install -g ipfs\n$ jsipfs daemon\nInitializing IPFS daemon...\njs-ipfs version: x.x.x\nSystem version: x64/darwin\nNode.js version: x.x.x\nSwarm listening on /ip4/127.0\n.... more output\n```\n\nYou can then add a file:\n\n```console\n$ jsipfs add ./hello-world.txt\nadded QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt\n```\n\n### Next Steps\n\n- Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)\n- Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples) to learn how to spawn an IPFS node in Node.js and in the Browser\n- Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node\n- Head over to <https://proto.school> to take interactive tutorials that cover core IPFS APIs\n- Check out <https://docs.ipfs.io> for tips, how-tos and more\n- See <https://blog.ipfs.io> for news and more\n- Need help? Please ask 'How do I?' questions on <https://discuss.ipfs.io>\n\n## Want to hack on IPFS?\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\nThis IPFS implementation in JavaScript needs your help!  There are a few things you can do right now to help out:\n\nRead the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).\n\n- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge\n- **Perform code reviews** More eyes will help\n  a. speed the project along\n  b. ensure quality, and\n  c. reduce possible future bugs.\n- **Add tests**. There can never be enough tests.\n\nFind out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)\n\n## Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/js-ipfs/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","maintainers":[{"email":"alex@achingbrain.net","name":"achingbrain"},{"email":"npm-service-account+ipfs@protocol.ai","name":"npm-service-account-ipfs"}],"time":{"modified":"2023-06-01T16:06:32.770Z","created":"2015-04-13T00:12:59.259Z","0.1.0":"2015-04-13T00:12:59.259Z","0.1.1":"2015-04-13T00:18:23.404Z","0.2.0":"2016-01-27T11:59:31.086Z","0.2.2":"2016-01-28T14:39:50.559Z","0.2.3":"2016-01-31T11:50:53.525Z","0.3.0":"2016-02-03T18:39:21.831Z","0.3.1":"2016-02-19T15:35:28.541Z","0.4.0":"2016-02-23T16:58:59.756Z","0.4.1":"2016-03-16T14:46:40.779Z","0.4.2":"2016-03-21T13:19:16.983Z","0.4.3":"2016-03-21T14:04:03.512Z","0.4.4":"2016-03-22T09:55:05.030Z","0.4.5":"2016-04-12T09:57:33.996Z","0.4.6":"2016-04-22T13:03:06.021Z","0.4.7":"2016-04-25T11:44:22.884Z","0.4.8":"2016-04-28T00:35:57.942Z","0.4.9":"2016-04-28T20:19:34.737Z","0.4.10":"2016-05-08T21:56:02.299Z","0.5.0":"2016-05-16T17:39:02.620Z","0.6.0":"2016-05-19T00:58:23.064Z","0.6.1":"2016-05-19T01:05:14.848Z","0.7.0":"2016-05-21T10:25:39.692Z","0.8.0":"2016-05-23T21:00:14.585Z","0.10.0":"2016-05-24T10:17:57.998Z","0.10.1":"2016-05-25T09:27:24.260Z","0.10.2":"2016-05-26T09:46:05.053Z","0.10.3":"2016-05-26T15:54:42.463Z","0.11.0":"2016-05-27T15:29:21.456Z","0.11.1":"2016-05-30T14:51:53.696Z","0.12.0":"2016-06-06T18:56:10.425Z","0.13.0":"2016-06-07T10:42:07.408Z","0.14.0":"2016-06-27T17:05:44.638Z","0.14.1":"2016-06-29T17:00:39.691Z","0.14.2":"2016-08-09T13:45:18.289Z","0.14.3":"2016-08-10T08:58:25.046Z","0.15.0":"2016-09-09T22:21:36.494Z","0.16.0":"2016-09-15T18:48:22.284Z","0.17.0":"2016-10-10T04:29:22.449Z","0.18.0":"2016-11-12T03:28:12.560Z","0.19.0":"2016-11-26T01:48:01.397Z","0.20.1":"2016-11-28T11:17:54.208Z","0.20.2":"2016-12-09T17:02:23.197Z","0.20.3":"2016-12-09T22:30:06.681Z","0.20.4":"2016-12-26T14:59:08.734Z","0.21.0":"2017-01-17T11:59:22.536Z","0.21.1":"2017-01-23T07:46:22.614Z","0.21.2":"2017-01-23T09:51:30.386Z","0.21.3":"2017-01-25T15:25:16.705Z","0.21.4":"2017-01-28T22:02:16.865Z","0.21.5":"2017-01-29T07:35:29.583Z","0.21.6":"2017-01-29T18:01:16.452Z","0.21.7":"2017-01-30T15:48:49.783Z","0.21.8":"2017-01-31T19:47:48.013Z","0.22.0":"2017-02-15T18:25:32.867Z","0.22.1":"2017-02-24T20:01:10.712Z","0.23.0":"2017-03-24T12:01:49.966Z","0.23.1":"2017-03-27T12:07:50.392Z","0.24.0":"2017-05-24T22:39:30.903Z","0.24.1":"2017-05-29T09:59:58.289Z","0.25.0":"2017-07-12T07:52:20.374Z","0.25.1":"2017-07-26T19:45:33.544Z","0.25.2":"2017-08-26T15:08:58.330Z","0.25.3":"2017-09-01T13:18:45.020Z","0.25.4":"2017-09-01T19:29:23.386Z","0.26.0":"2017-09-13T08:28:08.388Z","0.27.0":"2017-12-04T06:07:52.514Z","0.27.1":"2017-12-07T21:25:16.660Z","0.27.2":"2017-12-09T21:07:12.501Z","0.27.3":"2017-12-10T10:33:43.267Z","0.27.4":"2017-12-13T17:18:21.429Z","0.27.5":"2017-12-18T08:04:19.378Z","0.27.6":"2018-01-07T18:30:23.789Z","0.27.7":"2018-01-16T15:00:18.837Z","0.28.0":"2018-03-01T15:00:07.833Z","0.28.1":"2018-03-09T11:19:03.971Z","0.28.2":"2018-03-14T14:01:55.192Z","0.29.0":"2018-05-29T11:51:18.449Z","0.29.1":"2018-05-30T09:35:58.783Z","0.29.2":"2018-06-01T15:58:11.589Z","0.29.3":"2018-06-04T09:40:21.617Z","0.30.0":"2018-07-09T16:21:37.196Z","0.30.1":"2018-07-17T13:56:24.011Z","0.31.0":"2018-07-29T09:18:07.586Z","0.31.1":"2018-07-29T22:51:24.411Z","0.31.2":"2018-08-02T14:47:45.745Z","0.31.3":"2018-08-09T09:31:55.785Z","0.31.4":"2018-08-09T10:54:41.873Z","0.31.5":"2018-08-17T07:53:20.413Z","0.31.6":"2018-08-17T12:43:00.153Z","0.31.7":"2018-08-20T20:23:53.529Z","0.32.0-rc.1":"2018-09-03T13:06:32.699Z","0.32.0-rc.2":"2018-09-10T15:32:41.393Z","0.32.0":"2018-09-11T16:32:36.182Z","0.32.1":"2018-09-18T08:51:07.267Z","0.32.2":"2018-09-19T11:11:13.002Z","0.32.3":"2018-09-28T22:09:50.524Z","0.33.0-rc.1":"2018-10-19T20:26:18.179Z","0.33.0-rc.2":"2018-10-23T12:28:04.332Z","0.33.0-rc.3":"2018-10-24T08:26:33.397Z","0.33.0-rc.4":"2018-11-01T12:34:56.834Z","0.33.0":"2018-11-01T15:05:12.683Z","0.33.1":"2018-11-05T16:13:40.780Z","0.34.0-pre.0":"2018-12-07T11:20:07.542Z","0.34.0-rc.0":"2018-12-18T14:26:58.192Z","0.34.0-rc.1":"2019-01-15T13:09:57.466Z","0.34.0":"2019-01-17T10:49:50.903Z","0.34.1":"2019-01-21T12:15:59.191Z","0.34.2":"2019-01-21T15:53:44.662Z","0.34.3":"2019-01-24T09:28:04.938Z","0.34.4":"2019-01-24T17:23:48.389Z","0.35.0-pre.0":"2019-02-11T14:30:15.405Z","0.35.0-rc.0":"2019-03-06T12:51:09.661Z","0.35.0-rc.1":"2019-03-20T16:54:56.424Z","0.35.0-rc.2":"2019-03-21T20:12:37.419Z","0.35.0-rc.3":"2019-03-21T22:18:05.240Z","0.35.0-rc.4":"2019-03-28T23:01:14.859Z","0.35.0-rc.5":"2019-04-04T12:09:21.019Z","0.35.0-rc.6":"2019-04-11T15:06:19.941Z","0.35.0-rc.7":"2019-04-12T13:38:23.945Z","0.35.0":"2019-04-12T14:27:29.698Z","0.36.0-pre.0":"2019-05-17T14:07:36.674Z","0.36.0-rc.0":"2019-05-21T12:27:24.027Z","0.36.0":"2019-05-22T10:31:20.526Z","0.36.1":"2019-05-22T15:48:56.594Z","0.36.2":"2019-05-24T12:59:22.722Z","0.36.3":"2019-05-30T15:06:55.419Z","0.36.4":"2019-06-18T06:43:15.153Z","0.37.0-rc.0":"2019-07-17T15:01:22.703Z","0.37.0-rc.1":"2019-08-06T12:54:03.229Z","0.37.0":"2019-08-06T15:53:39.105Z","0.37.1":"2019-08-23T15:55:51.185Z","0.38.0-pre.0":"2019-08-27T09:25:38.994Z","0.38.0-pre.1":"2019-09-02T21:08:16.239Z","0.38.0-rc.0":"2019-09-09T17:41:50.595Z","0.38.0-rc.1":"2019-09-13T11:29:51.679Z","0.38.0-rc.2":"2019-09-16T10:37:51.758Z","0.38.0-rc.3":"2019-09-17T21:18:53.533Z","0.38.0-rc.4":"2019-09-17T23:27:24.309Z","0.38.0-rc.5":"2019-09-18T16:31:17.020Z","0.38.0-rc.6":"2019-09-25T08:44:49.970Z","0.38.0":"2019-09-30T16:11:18.349Z","0.39.0-rc.0":"2019-10-08T10:58:53.562Z","0.39.0-rc.1":"2019-10-15T14:12:35.567Z","0.39.0-rc.2":"2019-10-17T16:49:25.430Z","0.38.1":"2019-10-18T10:18:24.816Z","0.39.0":"2019-10-23T12:44:55.329Z","0.40.0-rc.0":"2019-11-11T14:40:23.049Z","0.40.0-rc.1":"2019-11-28T13:01:34.271Z","0.39.1":"2019-12-02T13:59:30.773Z","0.40.0":"2019-12-02T15:03:14.647Z","0.41.0-rc.0":"2020-02-03T21:02:46.134Z","0.41.0-rc.1":"2020-02-10T14:56:56.378Z","0.41.0-rc.2":"2020-02-11T10:13:36.024Z","0.41.0":"2020-02-13T13:16:54.079Z","0.41.1":"2020-02-17T20:38:12.989Z","0.41.2":"2020-02-26T12:44:56.796Z","0.41.1-rc.169":"2020-02-29T10:55:26.343Z","0.41.3-rc.157":"2020-02-29T13:41:53.943Z","0.41.3-rc.115":"2020-03-06T07:22:11.010Z","0.41.3-rc.91":"2020-03-06T13:21:48.446Z","0.41.3-rc.74":"2020-03-09T14:13:36.444Z","0.41.3-rc.55":"2020-03-11T12:57:44.613Z","0.41.3-rc.49":"2020-03-13T19:55:55.004Z","0.41.3-rc.5598":"2020-03-26T09:41:18.321Z","0.41.3-rc.5605":"2020-03-26T15:42:56.348Z","0.41.3-rc.5606":"2020-03-26T15:54:06.228Z","0.41.3-rc.5614":"2020-03-27T15:29:46.919Z","0.41.3-rc.5616":"2020-03-27T19:59:31.737Z","0.41.3-rc.5619":"2020-03-30T16:40:01.018Z","0.41.3-rc.5621":"2020-03-30T17:14:40.610Z","0.42.0":"2020-03-31T09:42:12.735Z","0.42.1":"2020-04-08T17:14:53.415Z","0.42.2-rc.4":"2020-04-10T16:55:36.641Z","0.42.2-rc.5":"2020-04-14T19:06:59.244Z","0.43.0":"2020-04-16T13:14:08.023Z","0.43.1-rc.13":"2020-04-28T12:00:37.735Z","0.43.1":"2020-04-28T12:52:16.398Z","0.43.2-rc.1":"2020-04-30T18:43:37.698Z","0.43.2":"2020-05-05T16:01:08.085Z","0.43.3":"2020-05-05T18:39:53.461Z","0.43.4-rc.3":"2020-05-14T12:16:56.753Z","0.44.0":"2020-05-18T09:37:21.342Z","0.44.1-rc.7":"2020-05-27T19:50:34.811Z","0.44.1-rc.8":"2020-05-28T13:30:33.385Z","0.45.0":"2020-05-29T13:48:04.538Z","0.45.1-rc.2":"2020-06-05T08:22:02.658Z","0.45.1-rc.3":"2020-06-05T12:21:51.279Z","0.46.0":"2020-06-05T12:34:40.408Z","0.46.1-rc.2":"2020-06-08T16:09:22.139Z","0.46.1-rc.3":"2020-06-09T16:39:05.657Z","0.46.1-rc.11":"2020-06-16T15:26:12.057Z","0.46.1-rc.24":"2020-06-22T13:11:27.111Z","0.46.1-rc.32":"2020-06-23T11:52:53.216Z","0.47.0":"2020-06-24T12:59:14.414Z","0.47.1-rc.2":"2020-06-25T12:21:55.394Z","0.47.1-rc.3":"2020-07-01T11:25:16.372Z","0.47.1-rc.5":"2020-07-02T13:20:53.098Z","0.47.1-rc.6":"2020-07-02T14:08:32.155Z","0.47.1-rc.7":"2020-07-02T18:10:51.496Z","0.47.1-rc.12":"2020-07-07T17:46:17.253Z","0.47.1-rc.14":"2020-07-07T19:01:31.749Z","0.47.1-rc.19":"2020-07-09T16:05:38.318Z","0.47.1-rc.21":"2020-07-10T17:55:56.628Z","0.47.1-rc.26":"2020-07-16T12:01:31.952Z","0.48.0":"2020-07-16T12:40:46.637Z","0.48.1-rc.2":"2020-07-17T13:38:17.553Z","0.48.1-rc.5":"2020-07-21T10:03:26.959Z","0.48.1":"2020-07-21T10:15:34.384Z","0.48.2-rc.0":"2020-07-21T13:30:54.181Z","0.48.2-rc.1":"2020-07-21T17:24:12.251Z","0.48.2-rc.2":"2020-07-23T09:52:51.197Z","0.48.2-rc.3":"2020-07-23T16:58:09.281Z","0.48.2":"2020-08-06T14:01:10.603Z","0.46.1":"2020-08-12T09:56:32.754Z","0.49.0":"2020-08-12T10:21:13.434Z","0.49.1-rc.2":"2020-08-18T16:01:02.431Z","0.49.1":"2020-08-24T16:58:24.406Z","0.49.2-rc.0":"2020-08-25T07:12:32.407Z","0.49.2-rc.4":"2020-08-27T17:08:30.731Z","0.49.2-rc.3":"2020-08-27T17:28:10.344Z","0.49.2-rc.5":"2020-09-02T11:11:46.559Z","0.49.2-rc.12":"2020-09-03T12:59:33.087Z","0.50.0":"2020-09-03T14:18:45.788Z","0.50.1-rc.25":"2020-09-04T14:27:38.550Z","0.50.1":"2020-09-04T15:04:28.029Z","0.50.2-rc.2":"2020-09-09T11:50:02.613Z","0.50.2":"2020-09-09T14:26:44.798Z","0.50.3-rc.1":"2020-09-10T08:16:21.903Z","0.50.3-rc.2":"2020-09-11T15:12:17.228Z","0.50.3-rc.3":"2020-09-14T13:08:56.179Z","0.50.3-rc.4":"2020-09-25T13:49:00.344Z","0.50.3-rc.11":"2020-10-10T08:15:03.659Z","0.50.3-rc.12":"2020-10-10T10:13:23.079Z","0.50.3-rc.14":"2020-10-15T15:45:55.050Z","0.50.3-rc.15":"2020-10-15T16:04:11.165Z","0.50.3-rc.16":"2020-10-21T16:46:42.362Z","0.50.3-rc.22":"2020-10-22T14:05:22.911Z","0.50.3-rc.24":"2020-10-23T11:33:09.950Z","0.50.3-rc.25":"2020-10-27T07:54:01.397Z","0.50.3-rc.26":"2020-10-27T09:24:22.657Z","0.50.3-rc.28":"2020-10-27T13:16:53.482Z","0.50.3-rc.29":"2020-10-27T15:11:17.223Z","0.50.3-rc.31":"2020-10-28T14:35:37.361Z","0.51.0":"2020-10-28T15:52:48.881Z","0.51.1-rc.2":"2020-10-28T17:07:55.833Z","0.51.1-rc.4":"2020-10-30T11:31:36.571Z","0.51.1-rc.5":"2020-10-30T15:36:14.862Z","0.51.1-rc.6":"2020-10-30T16:54:10.336Z","0.51.1-rc.8":"2020-11-02T13:53:04.776Z","0.51.1-rc.10":"2020-11-06T18:26:58.896Z","0.51.1-rc.12":"2020-11-09T16:12:49.150Z","0.51.1-rc.13":"2020-11-09T16:55:08.070Z","0.52.0":"2020-11-09T17:09:56.571Z","0.52.1-rc.1":"2020-11-10T09:13:54.487Z","0.52.1-rc.3":"2020-11-12T12:38:01.223Z","0.52.1-rc.5":"2020-11-13T09:22:34.238Z","0.52.1-rc.7":"2020-11-16T09:39:45.073Z","0.52.1-rc.8":"2020-11-16T10:38:12.513Z","0.52.1":"2020-11-16T11:29:05.894Z","0.52.2-rc.2":"2020-11-16T13:21:01.159Z","0.52.2-rc.3":"2020-11-18T12:52:57.336Z","0.52.2-rc.6":"2020-11-20T23:37:47.745Z","0.52.2-rc.8":"2020-11-25T07:55:22.078Z","0.52.2":"2020-11-25T08:37:57.116Z","0.52.3-rc.1":"2020-11-26T08:24:39.242Z","0.52.3-rc.2":"2020-11-26T08:35:07.514Z","0.52.3-rc.13":"2020-12-14T14:30:42.525Z","0.52.3":"2020-12-16T11:58:09.845Z","0.52.4-rc.1":"2020-12-18T14:43:24.091Z","0.52.4-rc.4":"2020-12-18T17:47:16.225Z","0.52.4-rc.5":"2021-01-13T12:26:50.154Z","0.52.4-rc.6":"2021-01-15T08:51:42.927Z","0.53.0":"2021-01-15T14:33:09.063Z","0.53.1":"2021-01-20T07:50:29.872Z","0.53.2":"2021-01-22T12:09:15.219Z","0.53.3-rc.3":"2021-01-30T08:09:29.304Z","0.54.0":"2021-02-01T11:37:23.698Z","0.54.1":"2021-02-02T09:09:52.578Z","0.54.2":"2021-02-08T15:39:10.667Z","0.54.3-rc.4":"2021-02-21T09:16:49.694Z","0.54.3-rc.5":"2021-02-22T16:42:22.240Z","0.54.3":"2021-03-09T10:48:11.600Z","0.54.4":"2021-03-10T11:18:05.317Z","0.54.5-rc.3":"2021-03-31T15:16:43.468Z","0.54.5-rc.11":"2021-04-28T12:16:46.759Z","0.54.5-rc.14":"2021-04-28T17:13:26.846Z","0.54.5-rc.17":"2021-04-29T16:56:59.158Z","0.54.5-rc.18":"2021-04-30T09:25:05.128Z","0.54.5-rc.19":"2021-04-30T17:05:19.502Z","0.54.5-rc.20":"2021-05-01T17:53:19.688Z","0.54.5-rc.21":"2021-05-02T09:00:59.792Z","0.54.5-rc.22":"2021-05-04T07:45:38.193Z","0.54.5-rc.24":"2021-05-04T10:57:25.267Z","0.54.5-rc.25":"2021-05-04T11:19:45.229Z","0.54.5-rc.26":"2021-05-04T13:56:18.335Z","0.54.5-rc.27":"2021-05-06T11:43:28.510Z","0.54.5-rc.28":"2021-05-06T14:18:32.223Z","0.54.5-rc.29":"2021-05-07T11:59:47.339Z","0.54.5-rc.30":"2021-05-07T13:40:19.480Z","0.54.5":"2021-05-07T15:46:12.662Z","0.54.5-rc.31":"2021-05-10T11:58:14.581Z","0.54.5-rc.32":"2021-05-10T12:21:33.832Z","0.55.0":"2021-05-10T14:58:51.882Z","0.55.1-rc.1":"2021-05-11T06:10:13.250Z","0.55.1":"2021-05-11T18:23:09.359Z","0.55.2-rc.1":"2021-05-11T20:27:48.668Z","0.55.2-rc.2":"2021-05-13T18:07:18.179Z","0.55.2-rc.3":"2021-05-25T14:40:41.393Z","0.55.2-rc.7":"2021-05-25T16:06:58.941Z","0.55.2":"2021-05-26T09:43:39.472Z","0.55.3-rc.1":"2021-05-26T12:25:28.892Z","0.55.3-rc.3":"2021-06-01T20:39:46.760Z","0.55.3-rc.4":"2021-06-05T06:17:48.134Z","0.55.3":"2021-06-05T06:33:43.498Z","0.55.4-rc.1":"2021-06-10T09:27:06.315Z","0.55.4-rc.2":"2021-06-15T16:49:30.843Z","0.55.4-rc.3":"2021-06-18T08:11:51.501Z","0.55.4-rc.4":"2021-06-18T09:21:31.914Z","0.55.4":"2021-06-18T11:16:36.503Z","0.55.5-rc.1":"2021-06-18T15:58:33.112Z","0.55.5-rc.2":"2021-06-25T15:14:21.419Z","0.55.5-rc.3":"2021-07-01T16:06:18.826Z","0.55.5-rc.6":"2021-07-19T15:32:03.496Z","0.55.5-rc.8":"2021-07-27T09:29:36.898Z","0.55.5-rc.9":"2021-07-27T10:01:45.599Z","0.55.5-rc.11":"2021-07-27T10:39:27.084Z","0.55.5-rc.14":"2021-07-27T12:20:39.248Z","0.55.5-rc.17":"2021-07-27T14:24:15.548Z","0.56.0":"2021-07-27T15:08:51.549Z","0.56.1-rc.1":"2021-07-28T11:30:41.060Z","0.56.1-rc.2":"2021-07-28T12:26:01.830Z","0.56.1-rc.5":"2021-07-28T16:57:12.445Z","0.56.1":"2021-07-30T17:09:22.229Z","0.56.1-rc.7":"2021-07-30T17:31:21.721Z","0.56.2-rc.1":"2021-07-30T18:57:44.401Z","0.56.2-rc.2":"2021-08-04T13:53:15.621Z","0.56.2-rc.3":"2021-08-05T11:48:42.584Z","0.56.2-rc.6":"2021-08-09T16:33:00.049Z","0.56.2-rc.8":"2021-08-10T07:19:56.826Z","0.56.2-rc.10":"2021-08-10T09:10:20.900Z","0.56.2-rc.11":"2021-08-11T09:23:29.351Z","0.57.0":"2021-08-11T15:12:50.261Z","0.57.1-rc.4":"2021-08-12T10:51:35.389Z","0.57.1-rc.5":"2021-08-12T11:07:38.768Z","0.57.1-rc.6":"2021-08-12T14:11:22.819Z","0.57.1-rc.7":"2021-08-16T15:47:44.573Z","0.58.0":"2021-08-17T10:43:41.618Z","0.57.1-rc.9":"2021-08-17T10:52:37.881Z","0.57.1-rc.10":"2021-08-17T11:10:02.217Z","0.58.1-rc.1":"2021-08-17T12:56:29.533Z","0.56.2":"2021-08-17T14:10:41.402Z","0.57.1":"2021-08-17T17:18:38.698Z","0.58.1":"2021-08-17T19:59:11.155Z","0.58.2-rc.1":"2021-08-17T21:56:26.025Z","0.58.2-rc.3":"2021-08-25T07:32:59.037Z","0.58.2-rc.4":"2021-08-25T08:53:23.238Z","0.58.2":"2021-08-25T15:57:15.621Z","0.58.3-rc.2":"2021-08-26T09:48:44.026Z","0.58.3-rc.3":"2021-08-26T11:10:38.239Z","0.58.3-rc.4":"2021-08-26T13:58:44.902Z","0.58.3-rc.5":"2021-08-26T15:43:44.996Z","0.58.3-rc.6":"2021-08-31T13:35:24.762Z","0.58.3-rc.7":"2021-09-02T15:00:27.856Z","0.58.3-rc.8":"2021-09-02T17:39:24.743Z","0.58.3":"2021-09-02T18:21:06.364Z","0.58.4-rc.1":"2021-09-06T11:19:27.031Z","0.58.4-rc.2":"2021-09-06T15:02:31.097Z","0.58.4-rc.4":"2021-09-07T17:04:16.033Z","0.58.4-rc.5":"2021-09-08T09:33:50.759Z","0.58.4":"2021-09-08T10:03:05.053Z","0.58.5-rc.1":"2021-09-14T13:40:41.322Z","0.58.5-rc.4":"2021-09-17T12:51:05.261Z","0.58.5":"2021-09-17T13:24:21.394Z","0.58.6-rc.0":"2021-09-17T13:30:24.746Z","0.58.7-rc.0":"2021-09-17T16:25:44.500Z","0.58.6":"2021-09-17T16:36:22.365Z","0.58.7-rc.1":"2021-09-21T16:10:58.659Z","0.58.7-rc.12":"2021-09-23T06:18:50.906Z","0.58.7-rc.14":"2021-09-23T10:48:04.379Z","0.58.7-rc.15":"2021-09-23T12:57:02.116Z","0.58.7-rc.16":"2021-09-23T18:33:27.170Z","0.58.7-rc.17":"2021-09-24T11:20:55.340Z","0.58.7-rc.18":"2021-09-24T12:45:44.921Z","0.59.0":"2021-09-24T12:51:20.832Z","0.59.1-rc.0":"2021-09-24T12:53:48.321Z","0.59.1-rc.1":"2021-09-25T17:26:21.942Z","0.59.1-rc.2":"2021-09-25T18:11:19.987Z","0.59.1-rc.3":"2021-09-27T16:37:38.967Z","0.59.1-rc.5":"2021-09-28T12:00:24.730Z","0.59.1":"2021-09-28T12:05:28.308Z","0.59.2-rc.0":"2021-09-28T12:07:52.125Z","0.59.2-rc.1":"2021-09-30T15:49:03.257Z","0.59.2-rc.2":"2021-09-30T17:39:24.837Z","0.59.2-rc.3":"2021-10-02T12:58:26.253Z","0.59.2-rc.4":"2021-10-08T14:33:12.389Z","0.59.2-rc.5":"2021-11-04T07:26:29.173Z","0.59.2-rc.6":"2021-11-12T11:31:22.589Z","0.60.1-rc.0":"2021-11-12T11:56:17.385Z","0.60.0":"2021-11-12T12:01:27.347Z","0.60.1-rc.1":"2021-11-19T15:42:35.345Z","0.60.2-rc.0":"2021-11-19T15:48:56.546Z","0.60.2-rc.1":"2021-11-19T17:23:56.709Z","0.60.2-rc.2":"2021-11-22T16:17:47.499Z","0.60.2-rc.3":"2021-11-24T09:36:14.711Z","0.60.3-rc.0":"2021-11-24T09:40:04.667Z","0.60.2":"2021-11-24T09:41:18.561Z","0.60.3-rc.1":"2021-12-03T10:52:23.149Z","0.60.3-rc.2":"2021-12-03T13:26:50.357Z","0.60.3-rc.3":"2021-12-03T14:05:56.772Z","0.60.3-rc.4":"2021-12-03T15:02:04.304Z","0.60.3-rc.5":"2021-12-06T10:38:12.807Z","0.60.3-rc.6":"2021-12-06T16:29:24.681Z","0.60.3-rc.7":"2021-12-06T22:24:04.438Z","0.60.3-rc.8":"2021-12-13T11:34:58.194Z","0.60.3-rc.9":"2021-12-13T12:10:03.672Z","0.60.3-rc.11":"2021-12-15T12:50:51.397Z","0.60.3-rc.10":"2021-12-15T12:51:02.626Z","0.60.3-rc.12":"2021-12-15T12:53:26.369Z","0.60.3-rc.13":"2021-12-15T18:25:34.191Z","0.61.0":"2021-12-15T20:29:32.587Z","0.61.1-rc.0":"2021-12-15T20:30:19.720Z","0.61.1-rc.1":"2021-12-16T09:07:29.630Z","0.61.1-rc.2":"2021-12-17T09:57:35.472Z","0.61.1-rc.3":"2022-01-13T18:31:42.989Z","0.61.1-rc.4":"2022-01-20T14:26:59.113Z","0.61.1-rc.5":"2022-01-21T15:46:36.603Z","0.61.1-7fe0da57f.0":"2022-01-26T12:15:51.428Z","0.61.1-5439a0e.0":"2022-01-26T13:07:57.873Z","0.61.1-a6b201af.0":"2022-01-27T15:37:47.176Z","0.61.1-fbe14923.0":"2022-01-27T18:17:53.884Z","0.61.1-6cb3a87e.0":"2022-01-27T19:13:04.544Z","0.62.1-2afef2eb.0":"2022-01-27T20:09:25.616Z","0.62.1-3a5d61d4.0":"2022-01-27T21:34:01.410Z","0.61.1-cca6e321.0":"2022-01-27T23:04:08.680Z","0.62.0":"2022-01-27T23:18:19.075Z","0.62.1-8d260215.0":"2022-01-27T23:53:28.328Z","0.62.1-2c8ec080.0":"2022-01-28T14:56:45.269Z","0.62.1-3a74c110.0":"2022-02-04T16:17:31.444Z","0.62.1-383dc07d.0":"2022-02-04T19:57:37.047Z","0.62.1-709831f6.0":"2022-02-06T16:03:46.534Z","0.62.1":"2022-02-07T16:51:55.930Z","0.62.2-1082fce9.0":"2022-02-18T16:15:16.056Z","0.62.2-125d42ba.0":"2022-03-01T09:47:10.185Z","0.62.2-df1bd1bb.0":"2022-03-01T11:11:24.066Z","0.62.2":"2022-04-05T15:10:30.252Z","0.62.3-e90b8f13.0":"2022-04-05T16:10:24.006Z","0.62.3-8f7ce23c.0":"2022-04-20T12:40:25.985Z","0.62.3":"2022-04-26T07:02:19.139Z","0.62.4-7165bf71.0":"2022-05-16T20:08:07.243Z","0.62.4-4e93dd5d.0":"2022-05-27T13:43:22.652Z","0.62.4-919b27a8.0":"2022-05-27T16:18:47.058Z","0.63.0":"2022-05-30T19:17:32.599Z","0.63.1-ddfb899f.0":"2022-05-30T19:57:11.228Z","0.63.1":"2022-05-30T20:48:19.754Z","0.63.2-764b4adc.0":"2022-06-01T14:26:38.710Z","0.63.2-be025c89.0":"2022-06-01T14:32:02.537Z","0.63.2-87e00a69.0":"2022-06-01T14:36:26.570Z","0.63.2":"2022-06-01T15:16:43.598Z","0.63.3-70e142ac.0":"2022-06-13T16:00:46.260Z","0.63.3":"2022-06-14T06:25:32.618Z","0.63.4-7be50bd1.0":"2022-06-22T17:48:50.810Z","0.63.4":"2022-06-23T12:03:32.492Z","0.63.5-00bd3dd0.0":"2022-06-24T09:31:01.328Z","0.63.5":"2022-06-24T10:25:37.939Z","0.63.6-a05695fc.0":"2022-07-20T13:22:31.406Z","0.63.6-39dbf708.0":"2022-08-17T21:43:12.988Z","0.63.6-8f351a89.0":"2022-08-17T23:19:05.133Z","0.63.6-83f9882e.0":"2022-09-06T11:30:51.746Z","0.63.6-051da161.0":"2022-09-07T12:55:50.064Z","0.64.0":"2022-09-07T13:38:19.749Z","0.64.1-b5456882.0":"2022-09-16T09:24:31.028Z","0.64.1-7c676f63.0":"2022-09-21T19:16:40.931Z","0.64.1":"2022-09-21T19:54:54.311Z","0.64.2-2a830bf5.0":"2022-09-21T20:54:17.261Z","0.64.2-7304a0f4.0":"2022-09-21T20:54:59.059Z","0.64.2":"2022-09-21T21:55:10.779Z","0.64.3-d75e0a39.0":"2022-09-22T08:52:25.270Z","0.64.3-d1b0a8a7.0":"2022-09-22T10:42:11.298Z","0.64.3-acbc1c62.0":"2022-09-22T13:00:07.156Z","0.64.3-dfc43d4e.0":"2022-09-26T14:20:37.184Z","0.64.3-0cee4a4c.0":"2022-10-24T09:13:43.770Z","0.65.0":"2022-10-24T10:47:42.050Z","0.65.1-a77e40cc.0":"2022-10-25T07:11:41.910Z","0.65.1-58e6f468.0":"2022-10-25T08:15:56.734Z","0.65.1-6ae5eb7d.0":"2022-10-28T07:30:03.655Z","0.65.1-6be59068.0":"2022-11-17T19:48:11.945Z","0.0.1-563806f1.0":"2023-01-09T18:11:28.352Z","0.0.1-e85e5b6e.0":"2023-01-09T19:16:19.325Z","0.0.1-2a6fede5.0":"2023-01-10T09:36:19.378Z","0.65.0-5f73ecad":"2023-01-10T17:15:18.138Z","0.65.0-4b4c124c":"2023-01-11T16:06:44.478Z","0.65.0-789ee585":"2023-01-11T17:06:15.505Z","0.65.0-fa578bac":"2023-01-11T17:51:07.858Z","0.65.0-d1c3abb3":"2023-01-11T18:09:50.022Z","0.66.0":"2023-01-12T11:37:35.494Z","0.66.0-6eeb1be5":"2023-01-13T18:21:12.613Z","0.66.0-ab02e8f8":"2023-01-17T12:25:00.097Z","0.66.0-3bcabe38":"2023-01-17T15:32:31.714Z","0.66.0-b64d4af0":"2023-02-01T11:25:10.098Z","0.66.0-e64813f6":"2023-05-24T18:46:22.278Z","0.66.0-4694e806":"2023-05-25T11:32:18.451Z","0.66.0-6d95ce08":"2023-05-25T12:11:14.099Z","0.66.0-7b79c1b8":"2023-05-25T12:46:56.492Z","0.66.1":"2023-05-25T15:00:21.365Z"},"homepage":"https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs#readme","keywords":["IPFS"],"repository":{"type":"git","url":"git+https://github.com/ipfs/js-ipfs.git"},"bugs":{"url":"https://github.com/ipfs/js-ipfs/issues"},"license":"Apache-2.0 OR MIT","readmeFilename":"README.md","users":{"285858315":true,"qodefox":true,"curioussavage":true,"wzbg":true,"majgis":true,"eerne":true}}